TSQL - 无法使用 CHARINDEX 找到 unicode 字符

TSQL - Cannot find unicode char with CHARINDEX

我无法使用 TSQL 在字符串中找到特殊的 Unicode 字符 - CHARINDEX

declare @n nchar(1), @str nchar(20)
set @n = nchar(8237) 
select 'x'+@n+'x'
set @str  = N'43‭0'+@n+N'22‬' -- after "3" there is also an unicode 8237 char
select charindex( @n  ,@str)
select patindex( '%‭%'  ,@str) -- between %% there is an unicode 8237 char

你有什么想法吗? 提前致谢..

U+202D LEFT-TO-RIGHT OVERRIDE 是一个方向字符,大多数排序规则比较都会忽略它。要解决此问题,请显式使用二进制排序规则:

SELECT CHARINDEX(@n, @str COLLATE Latin1_General_BIN2)

PATINDEX 类似,如果您注意使用 Unicode 常量(但无论如何我会拼写出 NCHAR,因为不可见字符会造成混淆):

select patindex( N'%‭%'  ,@str COLLATE Latin1_General_BIN2)