select case when 'AB' = 'A?B' then 1 else 0 end
结果:1
为什么第一个字符串中的问号不可见?
有没有人知道修复此问题?
答案 0 :(得分:4)
第一个'AB'
实际上是(A)(零宽度空间)(B)。
对于SqlServer,没有N前缀的带引号的字符串被视为每个字符的单字节字符串。显然是"非ascii"在比较之前,零宽度空间被转换为问号。
添加" N前缀"给出预期结果(0):
select case when N'AB' = N'AB' then 1 else 0 end
答案 1 :(得分:2)
答案 2 :(得分:1)
问号是使用这三个字节E2 80 8B
编码的,但是怎么样? - 它打败了我,但事实确实如此。也许SQL用一个?
替换了这个无效字符。
当我在PSPad中打开文本并切换到HEX视图并返回时,我也得到了正常的可见?
字符。
答案 3 :(得分:-1)
您可以使用:
select case when ('AB' = 'A?B' AND LEN('AB') = LEN('A?B')) then 1 else 0 end