为什么将列从varchar(50)更改为int需要更多空间

时间:2016-12-07 12:54:54

标签: sql-server int varchar

我将表导入MS SQL数据库。该表非常大,几乎完全填满了数据库。我使用的导入工具将我的数字列保存为varchar(50),但我希望它们是整数。因此,我将列更改为int

alter table <my_table> alter column <my_column> int

据我所知,int列应占用较少的磁盘空间,但上述查询会因可用空间不足而失败。

导致此问题的原因是什么,是否有可能的解决方法?

1 个答案:

答案 0 :(得分:4)

整数列使用4个字节。

基于documentation,可以轻松计算varchar列的大小:

  

存储大小是输入数据的实际长度+ 2个字节。   varchar的ISO同义词是共变或特征变异。

因此,如果您的列主要由单个数字组成,那么它只使用3个字节。 NULL值甚至使用更少的值(我认为只有两个长度字节)。当然,这表明您可以使用smallinttinyint,从而节省更多空间。