在可变长度数据上,Varchar(100)比char(100)占用更多空间

时间:2018-03-04 22:44:56

标签: sql-server char varchar

我正在寻求理解SQL Server中的不同char数据类型。我有一个测试列Address,其中包含100.000条char(100)类型的记录。列中的数据分布是均匀的,这意味着1-100之间的每个字符长度恰好代表1000次。然后我运行了以下脚本,希望看到使用的存储空间减少:

exec sp_spaceused N'AddressTable' -- Data size: 59.920 KB

alter table dbo.AddressTable
alter column [Address] varchar(100)

alter table dbo.AddressTable REBUILD

exec sp_spaceused N'AddressTable' -- Data size: 61.848 KB

但正如您所看到的,varchar(100)实际占用的空间比char(100)多。考虑到数据条目的大小变化如此之大,这怎么可能呢?

感谢您的时间。

1 个答案:

答案 0 :(得分:2)

如果您创建一个新表,然后将数据插入其中,而不是使用ALTER TABLE,会发生什么?

或者,如果你的表有一个聚集索引(没有DDL,所以我们不知道)试试这个:

ALTER INDEX ClusteredIndexName ON YourTable REBUILD