总览
CHARINDEX
使用类似排序规则的序列时,偶尔会返回错误的值:
Latin1_General_CI_AS
但可以使用如下排序规则:
SQL_Latin1_General_CP1_CI_AS
MS SQL Server 2008 R2和SQL Server 2016遇到此问题。
例子
假设数据库排序顺序为:
Latin1_General_CI_AS
print CHARINDEX( CHAR(254), 'Tþ' )
-返回正确的2 print CHARINDEX( CHAR(254), 'Th' )
-返回1表示错误print CHARINDEX( CHAR(253), 'Th' )
-返回0正确 print CHARINDEX( CHAR(254) Collate SQL_Latin1_General_CP1_CI_AS, 'Thþ' Collate SQL_Latin1_General_CP1_CI_AS)
-返回3是正确的 print CHARINDEX( CHAR(254) Collate Latin1_General_CI_AS, 'Thþ' Collate Latin1_General_CI_AS)
-返回1表示错误Latin1...
排序顺序是否存在已知错误?
这不是SQL Server特有的。
在C#中
string.Compare("þ", "th", false, new System.Globalization.CultureInfo(1033))
返回0
指示字符串比较相等。
或在记事本中单击下面的“全部替换”
造成
在不以“ SQL”开头的SQL Server排序规则中,使用Windows排序规则。
对于大多数地区的人(冰岛为例外),荆棘字符 þ
扩展为th
。
迈克尔·S·卡普兰(Michael S. Kaplan)在这篇文章中提供了有关此特定案例的更多信息。每朵玫瑰都有它的味道。该博客包含有关Windows排序规则的大量信息。扩展在这里有更详细的描述。
如果您不希望使用这些语义,则需要对所需的语义使用排序规则(可能是SQL或二进制)(可能通过显式collate
子句)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句