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