BIT(1)的存储大小是多少?

6

1
你有什么问题?顺便问一下,你见过一个长度只有1位的文件吗? - Ingo
1
@Ingo 我从未见过长度为1位的文件,但是32000行BIT(1)数据的存储需求是多少?是32k位还是32k字节? - Pacerier
2个回答

5

如果我有1000行BIT(1)数据,这是否意味着它需要1000 *(1 + 7)/ 8字节= 1000字节的数据? - Pacerier
1
@Pacerier:是的。这也意味着,如果您有1000行BIT(8)数据,则仍需要1000字节。 - ypercubeᵀᴹ
@ypercube 那么 BIT(1) 到底有什么意义呢?它不是用来存储布尔值的数据类型吗? - Pacerier
@ypercube 如果我们在表达式1000* ((M+7)/8 bytes)中将M=8代入,那么我们会得到1875字节,对吧? - Pacerier
我假设 15/8=1(除法带余数)。 - ypercubeᵀᴹ

2

这意味着数据库引擎不能仅存储一个位(bit)。它将合并表中的所有位字段(bit fields),直到达到可以在磁盘上存储的最小大小(例如32位机器上的4字节)。下一个位字段将存储在第二个4字节内存插槽中。

因此,在这种典型的32位机器上,1位或32位需要4字节,而33位需要8字节。


1
是的,但最小值将是1个字节,而不是4个,即使在32位机器上也是如此。 - ypercubeᵀᴹ
不谈论索引、系统表、表的描述、列等内容。 - Pierre Sevrain
@CharlesпјҢдҪ жҳҜиҜҙеҰӮжһңжҲ‘жңү32kиЎҢBIT(1)пјҢжҖ»еӯҳеӮЁйҮҸжҳҜ32k bitsеҗ—пјҹеӣ дёәеҰӮжһңжҲ‘们еңЁиЎЁиҫҫејҸ32k*((M+7)/8 bytes)дёӯд»Је…ҘM=1пјҢжҲ‘们дјҡеҫ—еҲ°32k bytesиҖҢдёҚжҳҜ32k bitesпјҢеҜ№еҗ§пјҹ - Pacerier
@Pacerior,我所描述的规则仅适用于表中一行数据。每行都有一个最小大小,至少是盒子上内存的最小内存大小。因此,在64位机器上,如果您有32k行1 x Bit(1)或32k行每行有64 x Bit(1),在两种情况下,每行都将占用至少8个字节,并且您将消耗32k x 8 = 256k字节的磁盘空间。 - Charles Bretana
重点是,每行中有一个位域或64个位域都无关紧要。在这两种情况下,它都将占用8个字节,因为这是可以在64位机器上分配和使用的最小内存量。也就是说,内存总是以64位(8字节)块分配的。 - Charles Bretana

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接