为什么将列从 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
值甚至使用更少的值(我认为只是两个长度字节)。当然,这表明您可以使用smallint
或tinyint
,节省更多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
值甚至使用更少的值(我认为只是两个长度字节)。当然,这表明您可以使用smallint
或tinyint
,节省更多space。