我在 .NET 站点上遇到了一些问题,拉丁语 (åäö) 和拉脱维亚语 (āē) 字符需要共存。在数据库中,我使用nvarchar
andntext
作为我的字段,如果我将文本直接输入数据库,一切正常。
问题是当我使用执行 SQL 的表单输入完全相同的文本时UPDATE
,拉脱维亚字符会转换为类似的拉丁字符,因此字符串“åäöāē”将保存为“åäöae”。
我尝试了一些不同的CodePages
,但我还没有得到我想要的结果。有没有人有什么建议?
您的 SQL 语句是否将值作为 unicode 值传递给数据库?
例如基本示例
INSERT YourTable VALUES ('Unicode Value')
应该:
INSERT YourTable VALUES (N'Unicode Value')
显然,我建议您使用参数化 SQL/存储过程并将参数定义为 NVARCHAR,但您明白我的意思。
通过分别获取管道的每一部分来弄清楚发生了什么。
请参阅我关于调试 unicode 问题并诊断出问题所在的文章。您可能会遇到问题的地方:
独立检查每一个,从不依赖任何特定的字体等。打印出所涉及的 Unicode 代码点(根据文章)。
哦,无论你在哪里指定它,都使用可以编码所有内容的编码 - 我建议使用 UTF-8。
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)