我很好奇它背后的原因是什么。我有一个像'aa'
这样的字符串。我通常会认为字符串长度应该是2左右。而是运行SELECT LEN('aa')
,它返回3而不是2。
背后的原因是什么?
答案 0 :(得分:1)
我需要几分钟才能弄明白。
假设其中有某种隐藏的字符,我怀疑有回车或换行的东西在那里。我已经尝试过不同的东西,如打印和子串。
事实上,我提出了这个想法,即第一个和第二个a
之间的标志。这可以通过以下代码证明。
SELECT LEN('aa'), SUBSTRING('aa',2,1)
结果:
----------- ----
3 ?
事实上,标志无法显示(?
)指向unicode。使用unicode字符串后,结果会发生变化。
SELECT LEN(N'aa'), SUBSTRING(N'aa',2,1)
结果:
----------- ----
3
符号仍然不可见。我尝试使用此命令检索正确的unicode符号:
SELECT LEN(N'aa'), UNICODE(SUBSTRING(N'aa',2,1))
结果如下:
----------- -----------
3 8290
事实证明,它是unicode中的invisible times字符。只是想让你知道这件事,以防其他人带来这样的事情。