位于https://docs.microsoft.com/en-us/sql/t-sql/data-types/bit-transact-sql?view=sql-server-2017的Microsoft文档说:
整数数据类型,其值可以为1、0或NULL。
SQL Server数据库引擎优化了位列的存储。如果表中有8个或更少的位列,则这些列将存储为1个字节。如果存在9到16位列,则这些列将存储为2个字节,依此类推。 可以将字符串值TRUE和FALSE转换为位值:将TRUE转换为1,将FALSE转换为0。 转换为位会将任何非零值提升为1。
如何在单个位中存储1、0和NULL?
答案 0 :(得分:1)
@MarkByers在有关SQL Server一般如何存储NULL
的问题How much size “Null” value takes in SQL Server中引用了一个规范的答案:
除了存储空值所需的空间外,拥有可空列的开销也很大。对于每一行,每个可空列使用一位来标记该列的值是否为空。无论列是固定长度还是可变长度,都是如此。
因此,我希望BIT
类型的行为与任何其他列相同,这意味着将有一个单独的位来跟踪该列是否为NULL
或不是{{1 }}。因此,SQL Server中的NULL
列实际上使用 two 位来跟踪这三个值。
答案 1 :(得分:1)
行标题中有一个NULL bitmap mask,用于跟踪哪些列为空。