1

我有一个从另一个源导入的表作为具有 char 数据类型的列,但该字段具有国际字符。我想在我的表中使用 nvarcvhar。我怎样才能做到这一点?

我已经尝试更新列(使用 alter table 语句或“cast as”),但存储的信息没有得到转换。

谢谢

4

3 回答 3

4

像这样

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 语法,不要删除并重新创建列

于 2012-05-04T15:23:29.893 回答
2
alter table your_table alter column your_column nvarchar(length)

SQLFiddle 示例

于 2012-05-04T15:23:42.103 回答
0

您的数据目前在 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。

于 2012-05-04T22:13:08.507 回答