我在数据库中保存非 ASCII 字符时遇到问题。现在我知道这里有很多关于类似问题的问题,但我已经完成了我的研究并且我被困住了。我也知道数据库中存在 COLLATE 设置的问题,但我的是正确的。我有一个非常奇怪的问题。
我有一个自动运行的函数,它使用 LINQ 将检索到的单词保存到数据库中。其中一些单词包含非 ASCII 字符,例如 (ċ、ħ、ġ 和 ż)。当我查看我的数据库并看到某些单词的字符(例如我上面列出的那些)更改为 ASCII 字母时,我意识到我遇到了这个问题。我发现这很奇怪,因为我已经在一个项目中工作,我通过 Web 表单保存非 ASCII 字符,完全没有问题。这里唯一的区别是单词不是通过网络表单输入的。
所以总的来说,奇怪的是:当非 ASCII 字符从网络传递并保存在数据库中(使用 LINQ)时,这些字符被保存。当相同的字符串和参数写入 SQL 语句并运行时,非 ASCII 字符不会被保存。我不明白发生了什么事。我试过使用:
System.Data.Objects.EntityFunctions.AsNonUnicode([word])
但它没有用。我还在 SQL 语句中测试了 N 前缀并且确实有效。
UPDATE tblWords
SET Word = N'żabbar'
WHERE ID = 19061
由于我在我的应用程序中使用 LINQ-to-Entities,我想知道是否可以使用 LINQ 插入 N 前缀,因为这是我设法保存非 ASCII 字符的唯一方法。
提前致谢!
编辑:好的,显然我的意思是非 ASCII 不是非 Unicode 字符,很抱歉造成混淆