SQL Server 2014 - varchar(x)NULL大小

时间:2014-09-06 14:52:08

标签: sql-server sql-server-2014

this one in SO等许多主题中讨论过NULL值大小的主题。

我可以理解,如果行具有固定大小,intvarchar(x) NULL valeus占用空间(如果属性为int则为零,如果属性为varchar(x)则为空格) NULL位图+ 1个字节。

我创建了一个包含两个属性的表:
CREATE TABLE Person (id int NULL, name VARCHAR(50) NULL)

使用script here获取B中每行的大小:

enter image description here

我可以从表中读到这些事实:
- 前三行:每个字母1个字节+ NULL位图1个字节 - 第4行:2个NULL位图。
- 最后两行:4个字节的int + 1个字节用于NULL位图。

为什么上面的int / varchar(50)NULL值没有采用所有声明的大小?

我正在使用SQL Server Management Studio 2014.规范是否已更改?

1 个答案:

答案 0 :(得分:3)

  1. 您使用的脚本是错误的。使用datalength()将无法检索物理长度。
  2. 您的期望不正确。可变长度字段不为NULL提供'空格',实际的int也可能不占用0,受行压缩。
  3. 使用sys.dm_db_index_physical_stats检索min_record_size_in_bytesmax_record_size_in_bytesavg_record_size_in_bytes。请阅读SQL Server table columns under the hoodInside the Storage Engine: Anatomy of a record以获取有关记录大小的说明。阅读Row Compression Implementation以更好地了解其他选择。