字符串比较的结果取决于字符集排序规则。默认情况下,这是安装服务器实例时指定的排序规则,但也可以在数据库和表列级别指定排序规则。它们也可以在查询中指定。排序规则可以应用于比较和单个字符串,并且有许多关于排序规则兼容性的规则。
您的示例中的字符串在您运行查询时使用的排序规则下被认为是相等的。
如果您有各种语言的字符串,那么对于使用什么排序规则没有简单的答案。如果您希望看起来不同的字符串被视为不相等,您可以尝试二进制排序规则。但是,如果您使用不同于系统排序规则的排序规则或应用的排序规则比较字符串,因为它是为数据库或表列指定的,查询处理器可能无法使用索引,并且您的查询可能会运行更多慢慢地。
用户提供的字符串的解释也可能取决于操作系统区域设置,并且结果可能会根据表示 Unicode 的 N 的使用而改变。
以下是示例中的字符串如何在某些排序规则下被视为相等而在其他排序规则下不相等的演示:
with t(a,b) as (
select
N'6Aࡀ㐠㗨㙡㙡⻑S0S0S0S0S0S0',
N'6Aݨ⻈㗨㙡㙡⻑S0S0S0S0S0S0'
)
select
'Japanese_CI_AI' as Collation,
case when a=b collate Japanese_CI_AI then 'Equal' else 'Not Equal' end as Result,
a, b
from t
union all
select
'Latin1_General_100_CS_AI' as Collation,
case when a=b collate Latin1_General_100_CS_AI then 'Equal' else 'Not Equal' end as Result,
a, b
from t
union all
select
'Arabic_100_CI_AS' as Collation,
case when a=b collate Arabic_100_CI_AS then 'Equal' else 'Not Equal' end as Result,
a, b
from t
union all
select
'SQL_Latin1_General_CP1_CI_AI' as Collation,
case when a=b collate SQL_Latin1_General_CP1_CI_AI then 'Equal' else 'Not Equal' end as Result,
a, b
from t
union all select 'Latin1_General_BIN' as Collation, case when a=b collate Latin1_General_BIN then 'Equal' else 'Not Equal' end as Result, a, b from t