在现有SQL Server 2005数据库中将数据类型varchar更改为nvarchar。有什么问题?

时间:2011-11-16 19:39:08

标签: sql sql-server sql-server-2005 sqldatatypes

我需要将数据库表中的列数据类型从varchar更改为nvarchar以支持中文字符(目前,具有这些字符的varchar字段仅显示问号)。

我知道如何更改值,但我想知道这样做是否安全。在改变之前有什么需要注意的吗?谢谢!

5 个答案:

答案 0 :(得分:31)

请注意,此更改是一种数据大小更新,请参阅SQL Server table columns under the hood。此更改将添加新的NVARCHAR列,它将更新将dta从旧VARCHAR复制到新NVARCHAR列的每一行,然后它将旧的VARCHAR列标记为已删除。如果表很大,这将生成一个大的日志,所以要做好准备。更新后,运行DBCC CLEANTABLE以回收前VARCHAR列使用的空间。如果你能负担得起,最好运行ALTER TABLE ... REBUILD,它不仅会回收空间,还会完全删除物理删除的VARCHAR列。开头的链接文章有更多细节。

您可能也有兴趣为您的桌子启用Unicode Compression

答案 1 :(得分:25)

您可以在非主要关键字段上执行操作:

ALTER TABLE [TableName]
ALTER COLUMN [ColumnName] nvarchar(N) null

在主键字段上它不起作用 - 您必须重新创建表

答案 2 :(得分:7)

确保长度不超过4000,因为VARCHAR的最大值为8000,而NVARCHAR仅为4K。

答案 3 :(得分:3)

桌子会变大。列中的每个字符将占用两倍的空间来存储。除非桌子真的很大,否则你可能不会注意到。

可能需要修改使用列数据的存储过程/视图/查询来处理nvarchar。

答案 4 :(得分:2)

检查此表的所有依赖项,因为基于此表的存储过程,函数,临时表以及用于插入/更新等的变量也可能需要更新到NVARCHAR。 还要检查表是否正在复制!这可能会给你带来一系列新问题!