【发布时间】:2015-02-21 19:11:55
【问题描述】:
@我在表格中有一行,其中包含以下文本“Urbański,Mariusz”。字符“ń”的十六进制表示是“6e cc 81”。所以这是以分解的 Unicode 规范化形式存储的。
当我使用如下查询“...... where Identification = N'Urbański, Mariusz'”和字符“ń”匹配分解形式(“6e cc 81”)时,查询返回预期的记录。
如果我使用合成 Unicode 规范化表单 ("ń" = "c5 84") 运行完全相同的查询,我不会得到任何结果。
我还尝试了“Select 1 Where N'Urbański, Mariusz' = N'Urbański, Mariusz'”,其中我使用了“ń”的 2 个变体,它们总是返回 true。
有没有办法让 SQL Server 将这两个值视为相等?
这是 Rhys Jones 要求的我的数据库配置
Database Collation : "Danish_Norwegian_CI_AS"
Column1 : IdRightsHolderSourceIdentification = NULL
Column2 : VersionInfo = NULL
Column3 : Source = "Danish_Norwegian_CI_AS"
Column4 : Identification = "SQL_Latin1_General_CP437_BIN"
Column5 : RightsHolder = NULL
正如 Rhys Jones 猜测的那样,有问题的列是 column4,它有一个二进制排序规则(这就是 BIN 的最终含义,对吗?)。非常感谢您的帮助。
【问题讨论】:
-
请您多解释一下您是如何使用的字符“ń”的十六进制表示是“6e cc 81”。
-
@BI 老兄,我相信他指的是stackoverflow.com/questions/6639770/…
-
@BIDude 这些十六进制代码是 UTF-8。用小写字母编写的 unicode 通常表示任何编码,(OTOH 全部大写,通常是 MSWIN 使用的 UTF-16(小端序)。)
标签: sql-server unicode sql-server-2008-r2 normalization unicode-normalization