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'430'+@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)
我无法使用 TSQL 在字符串中找到特殊的 Unicode 字符 - CHARINDEX
declare @n nchar(1), @str nchar(20)
set @n = nchar(8237)
select 'x'+@n+'x'
set @str = N'430'+@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)