Sql server 是否将char列转换为nvarchar,以便更改表中已有数据的代码页(语言编码)?
我有一个从另一个源导入的表,它是一个具有char数据类型的列,但该字段具有国际字符。我想在我的表格中使用nvarcvhar。我怎样才能做到这一点 我已经尝试使用ALTERTABLE语句或cast as更新列,但存储的信息没有转换 像这样谢谢你Sql server 是否将char列转换为nvarchar,以便更改表中已有数据的代码页(语言编码)?,sql-server,sql-server-2008,tsql,sql-server-2005,Sql Server,Sql Server 2008,Tsql,Sql Server 2005,我有一个从另一个源导入的表,它是一个具有char数据类型的列,但该字段具有国际字符。我想在我的表格中使用nvarcvhar。我怎样才能做到这一点 我已经尝试使用ALTERTABLE语句或cast as更新列,但存储的信息没有转换 像这样谢谢你 ALTER TABLE TableName ALTER COLUMN ColumnName NVARCHAR(size) 范例 CREATE TABLE test (bla VARCHAR(50)) GO ALTER TABLE test ALTER C
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 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设计器/向导,它将重新创建整个表,例如,请参见此处
您的数据当前在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。您的数据当前在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。我已经尝试过了,但存储的数据仍然是一样的。例如:见我添加的其他文本,您需要前缀N,所以N'漢語' 而不是漢語'您需要重新加载数据,因为它是以不同的格式存储的,1字节对2字节。这是不可能的,因为它从erp系统获取此信息。是否有方法转换损坏的数据?sql脚本vs?我已经尝试过了,但是存储的数据仍然是一样的。例如:见我添加的其他文本,您需要前缀N,所以N'漢語' 而不是漢語'您需要重新加载数据,因为它是以不同的格式存储的,1字节对2字节。这是不可能的,因为它从erp系统获取此信息。是否有方法转换损坏的数据?sql脚本vs?已经尝试过了。我存储在表中的数据是相同的。Char Column:已经尝试过了。我存储在表中的数据是相同的。字符列:请添加表、受影响列上的约束、使用索引/约束观察到的命名约定以及通过动态SQL脚本更改所有这些的能力。除非现有答案已经回答了您的问题。重新编辑,如果您有损坏的数据,请指定它是如何损坏的,例如数据应该在哪个代码页中,如果您知道的话,它看起来应该在哪个代码页中。我需要从代码页1252转换到代码页gb2312中文,这会更加困难,如果您仍然拥有原始数据源,那么最好扔掉数据库,并在重新插入数据时遵循答案。在这个8位代码页中,数据基本上被破坏了。我非常怀疑,因为当我对这个表运行crystal report时,它显示了正确的中文字符。请添加表的比例细节,受影响列的约束,使用索引/约束遵守的命名约定,以及通过动态SQL脚本更改所有这些的能力。除非现有答案已经回答了您的问题。重新编辑,如果您有损坏的数据,请指定它是如何损坏的,例如数据应该在哪个代码页中,如果您知道的话,它看起来应该在哪个代码页中。我需要从代码页1252转换到代码页gb2312中文,这会更加困难,如果您仍然拥有原始数据源,那么最好扔掉数据库,并在重新插入数据时遵循答案。在这个8位代码页中,数据基本上被破坏了。我非常怀疑这一点,因为当我再次运行crystal report时 这张表显示了正确的汉字