Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 使用'åäö';返回表中的所有项_Sql Server_Vb.net_Linq_Tsql_Collation - Fatal编程技术网

Sql server 使用'åäö';返回表中的所有项

Sql server 使用'åäö';返回表中的所有项,sql-server,vb.net,linq,tsql,collation,Sql Server,Vb.net,Linq,Tsql,Collation,我在我的网站上有一个基本的搜索功能。除了当用户只搜索这三个“åäö”中的一个字符,然后查询返回表中的所有项目外,其他一切都很好。这怎么可能?字符是否在t-sql中转换为其他字符 Dim sanitizedstring As String = helpclass.RemoveInvalidFileNameChars(txtSearch.Text, True) Dim getArtists = From s In dc.tbl_artists _ Where s.

我在我的网站上有一个基本的搜索功能。除了当用户只搜索这三个“åäö”中的一个字符,然后查询返回表中的所有项目外,其他一切都很好。这怎么可能?字符是否在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
编辑:
数据库的排序规则是拉丁文1\u General\u CI\u AI。

这种明显忽略某些字符的行为可能是由于排序规则造成的

由于排序规则不区分重音(AI),
åäö
将被DB视为与文本查询的
aao
相同

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

解决方案: 将数据库的排序规则更改为重音敏感(AS)

例如,
Latin1\u General\u CI\u AS
可能是明智的第一个测试

更多信息
  • 查看排序规则列表和更多信息

  • 请记住,对于可用性来说,不区分重音是一种不错的默认行为。以评论为例:您是否希望您的用户在键入奥斯陆时找到城市Øslo?。如果您有唯一的约束,它也会产生影响(在此上下文中,它们将被视为同一个键)


根据
RemoveInvalidFileNameChars
,这些字符中是否有一个被认为对文件名有效


否则,
RemoveInvalidFileNameChars
可能返回一个空字符串,
Contains
对于空字符串总是正确的。

它可能与您的数据库排序规则有关(因此实际上与C#code甚至TSQL无关)。是哪一个?(如果检查数据库/数据库服务器的属性,
sanitizedstring
包含什么?里面有什么东西吗?如果
RemoveInvalidFileNameChars
删除所有非英文字符,则它将是一个空字符串,表达式
ArtistName.Contains(“”
将生成
ArtistName,如“%”
条件,该条件匹配该排序规则中的所有非空值,
ä
ö
等于
a
o
。这就是
AI
的意思,不区分重音。同样,查询不会返回所有行,它只会返回那些包含匹配子字符串的行。“现在我只想知道如何将排序规则更改为支持åäöthen的排序规则。”← 在你扣动扳机之前仔细想想。如果您有一个名为
City
的列,并且您存储了
Øslo
(芬兰)的值,则无论哪种情况,都会将该值返回给用户。如果用户决定搜索该名称并键入
Oslo
Øslo
作为查询筛选值,AI排序规则版本将返回结果值
Øslo
,但非AI排序规则仅在带重音的
Øslo
查询时返回结果。这可能会导致用户出现意外的系统行为。^(续)-这也可能会影响列上的任何唯一性约束/索引。在没有AI排序的列上强制使用唯一约束将允许值
Øslo
Oslo
与现在的2个唯一值存在于同一列中。带有AI的列会认为这违反了唯一性约束。函数返回的åäö很好,不幸不是问题所在。