SELECT REPLACE(N'Chloe', 'œ', 'o'), REPLACE('Chloe', 'œ', 'o')
结果是:
Chlo Chloe
这太奇怪了。
其他方式:
SELECT
CASE WHEN N'œ' = N'oe' THEN 1 ELSE 0 END as NVarcharMatch,
CASE WHEN 'œ' = 'oe' THEN 1 ELSE 0 END as VarcharMatch
结果是:
NVarCharMatch VarcharMatch
1 0
最佳答案
传统SQL排序规则(“ SQL”排序规则前缀)和二进制排序规则(“ BIN”前缀)一次仅比较单个字符,因此“ –”永远不能等于“ oe”。
Windows排序规则和Unicode比较使用更强大的比较规则。这允许单个“ –”字符与两个连续字符“ oe”进行比较,因为它们在语义上是相同的。
--Chlo because Unicode comparison equal
SELECT REPLACE(N'Chloe' COLLATE SQL_Latin1_General_CP1_CI_AS, 'œ', 'o');
--Chloe because legacy SQL comparison unequal
SELECT REPLACE('Chloe' COLLATE SQL_Latin1_General_CP1_CI_AS, 'œ', 'o');
--Chloe because binary comparison unequal
SELECT REPLACE('Chloe' COLLATE Latin1_General_BIN, 'œ', 'o');
--Chlo because Windows collation comparison equal
SELECT REPLACE('Chloe' COLLATE Latin1_General_CI_AS, 'œ', 'o');
关于sql-server - 为什么在NVarchar中“œ”与“oe”匹配但在Varchar中为什么不匹配,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50181535/