Rah*_*ksu 6 sql-server unicode sql-server-2012
在SQL Server 2012中,我有一个带有nvarchar列的表,其列表为Latin1_General_100_CI_AS_ SC,它应该支持unicode代理项对字符或补充字符.
当我运行此查询时:
select KeyValue from terms where KeyValue = N'?'
Run Code Online (Sandbox Code Playgroud)
(上面是一个Unicode SC)
上面是一个卷曲循环字符,代码为10160(x27B0)
结果是数百个不同的单个字符条目,即使它们都有不同的UTF-16代码点.这是归因于整理吗?为什么没有完全匹配?
编辑:我现在认为这是由于整理.在UTF-16范围内似乎有一组"未定义"字符,超过1733个字符,并且通过此排序规则将它们视为相同.虽然代码高于65535的字符被视为唯一,但这些查询返回完全匹配.
以下两个查询有不同的结果:
select KeyValue from terms where KeyValue = N'?'
Run Code Online (Sandbox Code Playgroud)
返回3行:π和π和ᴨ
select KeyValue from terms where KeyValue LIKE N'?'
Run Code Online (Sandbox Code Playgroud)
返回2行:π和π
这是为什么?
这是最奇怪的.这个查询:
select KeyValue from terms where KeyValue like N'?%'
Run Code Online (Sandbox Code Playgroud)
返回表中的ALMOST ALL记录,其中包含许多多字符常规拉丁字符集术语,如"8w"或"apple".没有退回的人中有90%是以"æ"开头的.怎么了?
注意:只是为了给出一些上下文,这些都是维基百科的文章标题,而不是随机字符串.
SQL Server 和 tempdb 也有自己的排序规则,它们可能与数据库或列的排序规则不同。虽然应该为字符文字分配列或数据库的默认排序规则,但上述(可能过于简化)T-SQL 示例可能会错误表述/未揭示真正的问题。例如,为了简单起见,可以省略 ORDER BY 子句。当上述语句明确使用https://msdn.microsoft.com/en-us/library/ms184391.aspx ('COLLATE Latin1_General_100_CI_AS_SC')时,是否返回预期结果?
归档时间: |
|
查看次数: |
1520 次 |
最近记录: |