带有Latin1代码页的SQL Server数据库将日语字符显示为“?”

时间:2010-12-03 05:49:47

标签: sql-server-2005 unicode utf-8 codepages latin1

以下情景中的三个问题:

  • SQL Server 2005生产数据库,带有Latin1代码页并显示“?”对于Management Studio中的无效字符。
  • SomeCompanyApp客户端作为填充服务器和工作站数据的服务。
  • 显示“?”的SomeCompanyApp管理控制台对于亚洲人物。

由于这是一个prod db我不会写它。

我不知道在数据库中存储数据的客户端应用程序是否实际上正确地将其存储为Unicode,并且它根本不显示,因为它们使用Latin1作为控制台。

Q1:据我所知,SQL Server将nvarchar文本存储为Unicode,无论代码页如何,或者我完全错误,如果代码页是Latin1,那么不在该代码页中的所有内容都会转换为“?”。

Q2:是否与文字列相同?

问题3:有没有办法使用SQL Server Management Studio或Visual Studio和一些代码(不关心哪种语言:))查询数据库并告诉我字符是否确实显示日语,中文,韩语等?

我的最终目标是从数据库中提取数据并使用UTF-8将其存储在另一个数据库中,以显示日语和其他亚洲字符,就像它们在我自己的客户端webapp中一样。 我会接受Q3的答案。我可以使用多种语言编写代码,至少可以理解其他语言,但我对Unicode知之甚少。如果您想知道我的webapp将使用pyodbc和cassandra,但对于这些无关紧要的问题。

1 个答案:

答案 0 :(得分:2)

在SSMS中插入NVARCHAR列时,您需要确保在字符串前面添加N

这将 NOT 工作:

 INSERT INTO dbo.MyTable(NVarcharColumn) VALUES('Some Text with Special Char')

SQL Server会将VALUES(..)中的字符串解释为VARCHAR,从而删除任何特殊字符。

您需要

 INSERT INTO dbo.MyTable(NVarcharColumn) VALUES(N'Some Text with Special Char')

使用N'..'前缀文本文字告诉SQL Server将其视为NVARCHAR。

这有助于您解决Q3吗?