SQL Server 2019 Unicode符号替换按字符位置失效问题咨询
问题根因
该问题由Latin1_General_100_CI_AI_SC排序规则的字符匹配逻辑导致:
- 测试用的⚶符号(Unicode码位U+26B6)在该排序规则的模糊匹配逻辑下,会被判定为依附于前导字符的关联类字符,当它出现在普通字符之后时,会和前导字符被识别为同一个排序单元,单独匹配⚶时无法命中。
- 之前测试正常的☋符号(Unicode码位U+260B)属于独立符号类字符,无论出现在什么位置都会被判定为独立匹配单元,因此替换不受位置影响。
- 你观察到的“仅首位可替换”现象,是因为符号位于字符串首位时没有前导字符可关联,会被判定为独立单元,匹配逻辑可以正常命中。
解决方案
针对Unicode符号替换场景,直接使用二进制排序规则执行匹配即可,二进制排序规则完全基于字符码位精确匹配,不会受排序规则的模糊归类逻辑影响:
-- 采用推荐的Latin1_General_100_BIN2二进制排序规则,全位置字符均可正常替换 select replace(N'⚶a' collate Latin1_General_100_BIN2, N'⚶' collate Latin1_General_100_BIN2, N'XXX') select replace(N'a⚶' collate Latin1_General_100_BIN2, N'⚶' collate Latin1_General_100_BIN2, N'XXX')
执行后输出预期结果:
XXXa aXXX
内容的提问来源于stack exchange,提问作者Geo
相关产品推荐
相关产品推荐

