问号不可见

时间:2016-01-06 09:31:43

标签: sql

select case when 'A​B' = 'A?B' then 1 else 0 end

结果:1​​

为什么第一个字符串中的问号不可见?

有没有人知道修复此问题?

4 个答案:

答案 0 :(得分:4)

第一个'AB'实际上是(A)(零宽度空间)(B)。

对于SqlServer,没有N前缀的带引号的字符串被视为每个字符的单字节字符串。显然是"非ascii"在比较之前,零宽度空间被转换为问号。

添加" N前缀"给出预期结果(0):

select case when N'A​B' = N'AB' then 1 else 0 end

答案 1 :(得分:2)

重写你的sql语句,不要复制并通过它,它有隐藏吗?字符

enter image description here

答案 2 :(得分:1)

问号是使用这三个字节E2 80 8B编码的,但是怎么样? - 它打败了我,但事实确实如此。也许SQL用一个?替换了这个无效字符。 当我在PSPad中打开文本并切换到HEX视图并返回时,我也得到了正常的可见?字符。

答案 3 :(得分:-1)

您可以使用:

select case when ('A​B' = 'A?B' AND LEN('A​B') = LEN('A?​B')) then 1 else 0 end