Nate Asked: 2012-02-23 08:44:06 +0800 CST2012-02-23 08:44:06 +0800 CST 2012-02-23 08:44:06 +0800 CST SQL Server 位列真的使用了整个字节的空间吗? 772 我在 SSMS 周围闲逛,注意到我的INT列的“大小”是 4 个字节(预期),但看到我的BIT列是一个完整的字节,我有点震惊。 我误解了我在看什么吗? sql-server datatypes 3 个回答 Voted Best Answer SQLRockstar 2012-02-23T08:55:57+08:002012-02-23T08:55:57+08:00 您在表中定义了多少位列?我在 MSDN 上找到了这个,它说 8 位或更少的列存储为一个字节。 http://msdn.microsoft.com/en-us/library/ms177603.aspx Martin Smith 2012-02-23T08:54:37+08:002012-02-23T08:54:37+08:00 是的。 如果表中只有一bit列,则存储使用 abyte但最多 8bit列可以存储在同一个字节中,因此接下来的 7 列在这方面是“空闲的”。 还需要每列存储 1 位NULL_BITMAP(再次四舍五入到下一个字节)。bit在数据页中,无论它们是否允许,这都包含所有列NULL(除了稍后作为元数据添加的可空列仅通过ALTER TABLE尚未更新行的位置更改) JNK 2012-02-23T08:55:18+08:002012-02-23T08:55:18+08:00 BIT每行使用一个字节,但您最多可以将 8 个字段打包BIT到该一字节存储中。 所以第一个字段花费一个字节,但接下来的七个是免费的!
您在表中定义了多少位列?我在 MSDN 上找到了这个,它说 8 位或更少的列存储为一个字节。
http://msdn.microsoft.com/en-us/library/ms177603.aspx
是的。
如果表中只有一
bit
列,则存储使用 abyte
但最多 8bit
列可以存储在同一个字节中,因此接下来的 7 列在这方面是“空闲的”。还需要每列存储 1 位
NULL_BITMAP
(再次四舍五入到下一个字节)。bit
在数据页中,无论它们是否允许,这都包含所有列NULL
(除了稍后作为元数据添加的可空列仅通过ALTER TABLE
尚未更新行的位置更改)BIT
每行使用一个字节,但您最多可以将 8 个字段打包BIT
到该一字节存储中。所以第一个字段花费一个字节,但接下来的七个是免费的!