0

我在 .NET 站点上遇到了一些问题,拉丁语 (åäö) 和拉脱维亚语 (āē) 字符需要共存。在数据库中,我使用nvarcharandntext作为我的字段,如果我将文本直接输入数据库,一切正常。

问题是当我使用执行 SQL 的表单输入完全相同的文本时UPDATE,拉脱维亚字符会转换为类似的拉丁字符,因此字符串“åäöāē”将保存为“åäöae”。

我尝试了一些不同的CodePages,但我还没有得到我想要的结果。有没有人有什么建议?

4

3 回答 3

4

您的 SQL 语句是否将值作为 unicode 值传递给数据库?

例如基本示例

INSERT YourTable VALUES ('Unicode Value')

应该:

INSERT YourTable VALUES (N'Unicode Value')

显然,我建议您使用参数化 SQL/存储过程并将参数定义为 NVARCHAR,但您明白我的意思。

于 2009-11-02T15:19:08.570 回答
1

通过分别获取管道的每一部分来弄清楚发生了什么。

请参阅我关于调试 unicode 问题并诊断出问题所在的文章。您可能会遇到问题的地方:

  • 从用户那里获取数据
  • 更新数据库
  • 从数据库中获取
  • 显示您获取的数据

独立检查每一个,从不依赖任何特定的字体等。打印出所涉及的 Unicode 代码点(根据文章)。

哦,无论你在哪里指定它,都使用可以编码所有内容的编码 - 我建议使用 UTF-8。

于 2009-11-02T15:16:45.127 回答
0

Windows 窗体应用程序

在 windows 窗体文本框中输入文本时,您需要使用 unicode 字体,例如 Arial Unicode MS。

网页

确保您使用 UTF-8 作为响应代码页。微软关于这个http://support.microsoft.com/kb/893663的精彩文章

UTF-8 将正确编码任何字符。请记住,数据库中的 NText 和 NVarChar 是 UTF-16 数据类型,因此从查询分析器查看数据可能会正确显示。

在你的 SQL

如果您正在动态构建 SQL,请确保使用 N 前缀,例如

INSERT INTO TABLE (Name, Number) VALUES (N'MyName', 1)
于 2009-11-02T15:15:30.420 回答