Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 是否将char列转换为nvarchar,以便更改表中已有数据的代码页(语言编码)?_Sql Server_Sql Server 2008_Tsql_Sql Server 2005 - Fatal编程技术网

Sql server 是否将char列转换为nvarchar,以便更改表中已有数据的代码页(语言编码)?

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

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

我已经尝试使用ALTERTABLE语句或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 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时 这张表显示了正确的汉字