【发布时间】:2014-02-01 14:59:33
【问题描述】:
Microsoft SQL Server DBMS 中可为空的数据类型的大小是多少?
例如,不可为空的 int 应该占用 4 个字节,多少空间将专用于可空列?
子问题:可为空的 int、char(N)、nvarchar(N) - 我认为它们的存储方式可能不同。
我读到的:
- Where to find the size of SQL Server data types - 为我的 SQL Server 版本获取 sql 类型列表及其大小的好方法。但对可空类型只字未提。
- http://msdn.microsoft.com/en-us/library/ms189124.aspx - 有一个计算可变大小列所需空间的公式:“Variable_Data_Size = 2 + (Num_Variable_Cols x 2) + Max_Var_Size”。这很奇怪:为什么它包含 *2 乘数(没有任何关于 nvarchar 的说明 - 这个公式适用于所有可变大小的类型,如来自解释); Max_Var_Size 是相加而不是相乘的,一定是错字;最后它包含 +2 个字节用于存储值的长度,但又不包含用于存储 NULL 值的任何内容。据我了解,可以使用值长度 2 字节的剩余 3 位来存储 NULL 标识符,但它真的是这样存储的吗?
- How much size "Null" value takes in SQL Server - 对我来说,最佳答案令人困惑。 @Mark Byers 说“如果字段是固定宽度,则存储 NULL 占用与任何其他值相同的空间 - 字段的宽度”,但不可能将标准整数值间隔和附加 NULL 值存储在相同的计数中位。然后“如果字段是可变宽度,则 NULL 值不占用空间” - 再次存储 NULL 根本不能占用空间 - 它必须为空值存储一些标记。与那里的其他答案类似的混淆:有人说它需要 2 个额外的字节,有人说它只需要 1 个字节。
- http://home.clara.net/drdsl/MSSQL/DataTypes.html - 带有类型大小的漂亮表格,但同样没有专门用于 NULL 值。
【问题讨论】:
标签: sql sql-server