【发布时间】:2015-09-16 00:24:36
【问题描述】:
我很好奇这背后的原因是什么。我有一个这样的字符串'aa'。我通常会假设字符串长度应该在 2 左右。相反,我运行 SELECT LEN('aa'),它返回 3 而不是 2。
背后的原因是什么?
【问题讨论】:
标签: sql-server unicode unicode-string
我很好奇这背后的原因是什么。我有一个这样的字符串'aa'。我通常会假设字符串长度应该在 2 左右。相反,我运行 SELECT LEN('aa'),它返回 3 而不是 2。
背后的原因是什么?
【问题讨论】:
标签: sql-server unicode unicode-string
我需要几分钟才能弄清楚。
假设其中有某种隐藏的字符,我怀疑其中有诸如回车或换行之类的东西。我已经尝试了不同的方法,比如一直打印和子字符串。
事实上,我想出了这个主意,在第一个和第二个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 字符。只是想让你知道这一点,以防其他人出现这样的事情。
【讨论】:
SELECT ASCII(SUBSTRING(N'aa',2,1)) 说 63 - 这是“?”如果我没记错的话
?,但它是一个UNICODE 字符串。我也只是在第一种情况下考虑了?。 ;-)