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

Why altering column from varchar(50) to int requires more space

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

alter table <my_table> alter column <my_column> int

据我所知,int列应该占用较少的磁盘space,但是上面的查询失败,错误是空闲空间不足space。

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

整数列使用 4 个字节。

基于documentation,很容易计算出一个varchar列的大小:

The storage size is the actual length of the data entered + 2 bytes. The ISO synonyms for varchar are charvarying or charactervarying.

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