我需要将数据库表中的列数据类型从varchar
更改为nvarchar
以支持中文字符(当前,这些字符只有varchar
字段只显示问号)。将数据类型varchar更改为现有SQL Server 2005数据库中的nvarchar。任何问题?
我知道如何更改这些值,但我想看看是否安全。在改变之前有什么需要注意的吗?谢谢!
我需要将数据库表中的列数据类型从varchar
更改为nvarchar
以支持中文字符(当前,这些字符只有varchar
字段只显示问号)。将数据类型varchar更改为现有SQL Server 2005数据库中的nvarchar。任何问题?
我知道如何更改这些值,但我想看看是否安全。在改变之前有什么需要注意的吗?谢谢!
请注意,此更改是数据大小更新,请参阅SQL Server table columns under the hood。该更改将添加一个新的NVARCHAR列,它将更新将每个行从旧VARCHAR复制到新NVARCHAR列的每行,然后将旧VARCHAR列标记为已删除。如果表格很大,这会产生一个大日志,所以要做好准备。更新后,运行DBCC CLEANTABLE
以回收前一个VARCHAR列使用的空间。如果你能负担得起,最好运行ALTER TABLE ... REBUILD
,它不仅会回收空间,还会完全删除物理删除的VARCHAR列。在开始的链接文章有更多的细节。
您可能也有兴趣为您的桌子启用Unicode Compression。
请确保长度不超过4000,因为VARCHAR的最大值为8000,而NVARCHAR仅为4K。
表格会变大。列中的每个字符都将占用两倍的空间来存储。除非桌子真的很大,否则你可能不会注意到。
使用列数据的存储过程/视图/查询可能需要修改以处理nvarchar。
您可以在非主键字段做:
ALTER TABLE [TableName]
ALTER COLUMN [ColumnName] nvarchar(N) null
它的服务将无法正常工作的主键字段 - 你将不得不重新创建表
检查所有依赖此表作为存储procs,函数,基于此表的临时表以及用于插入/更新等的变量等也可能需要更新到NVARCHAR。 还检查表是否在复制!这可能会导致一系列新问题!