使用“åäö”的 Linq 查询 returns table 中的所有项目

Linq query with 'åäö' returns all items in table

我的网站上有基本的搜索功能。除了当用户仅搜索这三个 'åäö' 中的一个字符然后查询 returns table 中的所有项目时,一切都运行良好。怎么会这样?字符是否转换为 t-sql 中的其他内容?

Dim sanitizedstring As String = helpclass.RemoveInvalidFileNameChars(txtSearch.Text, True)

Dim getArtists = From s In dc.tbl_artists _
                 Where s.ArtistName.ToString.ToLower.Contains(sanitizedstring) _
                 Select s

编辑: 数据库的排序规则是 Latin1_General_CI_AI.

这种明显忽略某些字符的行为可能是由于整理。

由于您的排序规则是重音 不敏感 (AI),åäö 将被数据库视为与文本查询的 aao 相同。

这可能是问题的根源,(请注意,在不知道您的数据是什么的情况下,我们无法确定诊断结果)

解决方案:

将数据库的排序规则更改为区分重音 (AS)。

例如,Latin1_General_CI_AS 可能是一个明智的第一次测试。

更多信息

  • SQLServer collation documentation 获取排序规则列表和更多信息

  • This interesting and detailed answer on a related Stack Overflow question

  • 请记住,对于可用性而言,不区分重音是一种不错的默认行为。从评论中举个例子:你想让你的用户在输入 Oslo 时找到城市 Øslo 吗?。如果您有唯一约束(在这种情况下它们将被视为相同的键),它也会产生影响

根据 RemoveInvalidFileNameChars,这些字符中的任何字符是否被认为对文件名有效?

如果不是,RemoveInvalidFileNameChars 可能返回一个空字符串,而 Contains 对于空字符串总是正确的。