1

以下场景的三个问题:

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

由于这是一个产品数据库,我不会写信给它。

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

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

Q2:文字栏也一样吗?

Q3:有没有办法使用 SQL Server Management Studio 或 Visual Studio 和一些代码(不关心哪种语言:))来查询数据库并告诉我字符是否真的显示为日语、中文、韩语等。 ?

我的最终目标是从数据库中提取数据并使用 UTF-8 将其存储在另一个数据库中,以在我自己的客户端 webapp 中显示日语和其他亚洲字符。 我将满足于 Q3 的答案。 我可以用多种语言进行编码,至少可以理解其他一些语言,但我对 Unicode 的了解还不够。如果您想知道我的 webapp 将使用 pyodbc 和 cassandra,但对于这些问题并不重要。

4

1 回答 1

2

在 SSMS 中插入 NVARCHAR 列时,您需要绝对确保您的字符串前缀为N

这将不起作用

 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')

用 an 作为文本文字的前缀N'..'告诉 SQL Server 一直将其视为 NVARCHAR。

这是否有助于您解决 Q3 问题?

于 2010-12-03T06:05:26.923 回答