sql-server - 带有“åäö”的 Linq 查询返回表中的所有项目
问题描述
我的网站上有一个基本的搜索功能。一切正常,除了当用户只搜索这三个“åäö”中的一个字符时,查询会返回表中的所有项目。怎么会这样?字符是否转换为 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),åäö
因此 DB 会将其视为与aao
文本查询相同。
这可能是问题的根源,(请注意,在不知道您的数据是什么的情况下,我们无法确定诊断结果)
解决方案 :
将数据库的排序规则更改为区分重音 (AS)。
例如,Latin1_General_CI_AS
可能是一个明智的第一个测试。
更多信息
排序规则列表和更多信息的SQLServer 排序规则文档
请记住,出于可用性考虑,对口音不敏感是一种不错的默认行为。举个评论的例子:你想让你的用户在输入 Oslo 时找到城市 Øslo 吗?如果您有唯一约束,它也会产生影响(在这种情况下,它们将被视为相同的键)
推荐阅读
- javascript - 使用功能组件内部的泛型实例化钩子上下文
- ios - 是否可以在基于 Storyboard 的应用程序中为 iPhone 和 iPad(甚至 Catalyst)使用不同的 UITableView 样式?
- c# - C# IMemoryCache - 修改对象属性而不更新内存缓存
- typescript - 返回具有相同参数的类型对象
- c# - C# StructLayout 和处置
- android-studio - 最小化 Android Studio 中的片段
- javascript - JavaScript中的对象,对象文字和模板文字有什么区别
- r - 如何更改分组格点 xyplot 中的 x 轴值
- python - 如何在 Flask cookie 会话中安全地存储 OAuth 凭据?
- c - 理解 %*d 和 if (( scanf( "%d", &n ) != 1 ) || ( n <= 0 )) in c