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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在可变长度数据上,Varchar(100)比char(100)占用更多空间相关的知识,希望对你有一定的参考价值。

我正在寻求了解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)多。考虑到数据条目的大小变化太大,这怎么可能呢?

谢谢你的时间。

答案

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

或者,如果您的表具有聚簇索引(没有DDL,所以我们不知道),请尝试以下方法:

ALTER INDEX ClusteredIndexName ON YourTable REBUILD

以上是关于在可变长度数据上,Varchar(100)比char(100)占用更多空间的主要内容,如果未能解决你的问题,请参考以下文章

Mysql的相关知识点

数据库中char与varchar类型的区别

使用 CHAR 比使用 VARCHAR 有啥好处?

MySQL选择合适的数据类型

MySQL: 23 VARCHAR可变长度字段在磁盘上的存储机制

varchar字段的长度是100相当于多少个汉字?