【发布时间】:2015-09-21 17:24:17
【问题描述】:
在 SQL Server 2012 中,我有一个带有排序规则 Latin1_General_100_CI_AS_SC 的 nvarchar 列的表,它应该支持 unicode 代理对字符或补充字符。
-
当我运行这个查询时:
select KeyValue from terms where KeyValue = N'➰'(上面是 Unicode SC)
上面是代码 10160 (x27B0) 的花环字符 结果是数百个看起来不同的单字符条目,即使它们都有不同的 UTF-16 代码点。这是因为整理吗?为什么没有完全匹配?
编辑:我现在认为这是由于整理。 UTF-16 范围内似乎有一组“未定义”字符,超过 1733 个字符,并且通过这种排序规则将它们视为相同。虽然,代码高于 65535 的字符被视为唯一字符,并且这些查询返回完全匹配。 -
以下两个查询有不同的结果:
select KeyValue from terms where KeyValue = N'π'返回 3 行:π 和 ℼ 和 ᴨ
select KeyValue from terms where KeyValue LIKE N'π'返回 2 行:π 和 ℼ
这是为什么呢? -
这是最奇怪的。这个查询:
select KeyValue from terms where KeyValue like N'➰%'返回表中的几乎所有记录,其中包含许多多字符的常规拉丁字符集术语,例如“8w”或“apple”。 90% 未返回的都是以“æ”开头的。发生了什么?
注意:只是为了给这一点上下文,这些都是维基百科的文章标题,而不是随机字符串。
【问题讨论】:
-
数据库排序规则是否支持 SC?它会影响查询中的字符串文字。
-
@RogerWolf 数据库的默认排序规则是相同的,如果这就是您的意思的话。
-
KeyValue是如何定义的?nvarchar(x),我猜?或varchar(x)? -
非常有趣的问题。点赞。
-
这是一件奇怪的事情......您第一个查询中的字符是 CURLY LOOP (U+27B0)。此字符不应该需要代理对,因此“SC”排序规则应该是无关紧要的。我错过了什么吗?
标签: sql-server unicode sql-server-2012