0

我在数据库中保存非 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 字符,很抱歉造成混淆

4

1 回答 1

0

我设法解决此问题的唯一方法是使用 LINQ 而不是使用该AddObject()方法运行原始 SQL。为此,我使用了ExecuteStoreCommand(). 因此,在我的情况下,我使用了这样的东西:

databaseEntities entityObject = new databaseEntities();

public void AddWord(Word word) {
    entityObject.ExecuteStoreCommand("INSERT INTO tblWords VALUES (N'" + word.Word + "', " + word.TotalCount + ")");
}
于 2013-04-29T13:01:23.493 回答