我有一个从另一个源导入的表作为具有 char 数据类型的列,但该字段具有国际字符。我想在我的表中使用 nvarcvhar。我怎样才能做到这一点?
我已经尝试更新列(使用 alter table 语句或“cast as”),但存储的信息没有得到转换。
谢谢
我有一个从另一个源导入的表作为具有 char 数据类型的列,但该字段具有国际字符。我想在我的表中使用 nvarcvhar。我怎样才能做到这一点?
我已经尝试更新列(使用 alter table 语句或“cast as”),但存储的信息没有得到转换。
谢谢
像这样
ALTER TABLE TableName ALTER COLUMN ColumnName NVARCHAR(size)
例子
CREATE TABLE test (bla VARCHAR(50))
GO
ALTER TABLE test ALTER COLUMN bla NVARCHAR(50)
确保在进行插入时在字符串前面加上 N
INSERT test VALUES (N'漢語')
SELECT * FROM test
输出
bla
--------------------------------------------------
漢語
(1 row(s) affected)
无论您做什么,都不要使用 SSMS 设计器/向导,它会重新创建整个表,例如,请参见此处更改列数据类型时使用 ALTER TABLE TableName ALTER Column 语法,不要删除并重新创建列
alter table your_table alter column your_column nvarchar(length)
您的数据目前在 EUC-CN 中,伪装成 CP1252。它没有丢失。
您有几种方法可用于转换为 Unicode(请参阅转换 SQL 数据库部分以了解概述)。对于 SQL Server,您可以创建扩展存储过程以将 EUC-CN 转换为 Unicode。这将起作用,但并不容易(在这种情况下,您的数据使用代码页 51936)。
运气好的话,根据您的数据中出现的特定字符以及您安装的语言包,您可能能够像从代码页 936 一样进行转换,如下所示:
ALTER DATABASE mydatabasename COLLATE Chinese_PRC
如果成功,请对要转换的每一列执行相同的操作:
ALTER TABLE mytablename ALTER COLUMN mycolumnname
varchar(4000) COLLATE Chinese_PRC NOT NULL
然后才将它们转换为 NVARCHAR。