SQL Server 位列是否真的使用了整个字节的空间?

Nat*_*ate 20 sql-server datatypes

我在 SSMS 周围闲逛,注意到我的INT列的“大小”是 4 个字节(预期),但看到我的BIT列是一个完整字节时,我有点震惊。

我误解了我在看什么吗?

SQL*_*tar 17

您在表中定义了多少位列?我在 MSDN 上找到了这个,它说 8 位或更少位的列存储为一个字节。

http://msdn.microsoft.com/en-us/library/ms177603.aspx


Mar*_*ith 14

是的。

如果bit表中只有一列,则存储使用 abyte但最多bit可以在同一字节中存储8列,因此接下来的 7 列在这方面是“免费的”。

还需要每列 1 位存储NULL_BITMAP(再次向上舍入到下一个字节)。在数据页面中,这包含bit所有列的a ,无论它们是否允许NULL除了稍后添加的可为空的列作为元数据仅通过ALTER TABLE行尚未更新的位置更改)


JNK*_*JNK 9

BIT每行使用一个字节,但您最多可以将 8 个BIT字段打包到该字节存储中。

所以第一个字段花费一个字节,但接下来的七个是免费的