【问题标题】:Weird string behaviour in SQL-ServerSQL-Server 中奇怪的字符串行为
【发布时间】:2015-09-16 00:24:36
【问题描述】:

我很好奇这背后的原因是什么。我有一个这样的字符串'a⁢a'。我通常会假设字符串长度应该在 2 左右。相反,我运行 SELECT LEN('a⁢a'),它返回 3 而不是 2。

背后的原因是什么?

【问题讨论】:

    标签: sql-server unicode unicode-string


    【解决方案1】:

    我需要几分钟才能弄清楚。

    假设其中有某种隐藏的字符,我怀疑其中有诸如回车或换行之类的东西。我已经尝试了不同的方法,比如一直打印和子字符串。

    事实上,我想出了这个主意,在第一个和第二个a 之间必须有一个标志。这可以通过以下代码来证明。

    SELECT LEN('a⁢a'), SUBSTRING('a⁢a',2,1)
    

    结果:

    ----------- ----
    3           ?
    

    无法显示标志 (?) 的事实将我指向 unicode。使用 unicode 字符串后,结果会发生变化。

    SELECT LEN(N'a⁢a'), SUBSTRING(N'a⁢a',2,1) 
    

    结果:

    ----------- ----
    3           ⁢
    

    符号仍然不可见。我尝试使用以下命令检索正确的 unicode 符号:

    SELECT LEN(N'a⁢a'), UNICODE(SUBSTRING(N'a⁢a',2,1))
    

    结果如下:

    ----------- -----------
    3           8290
    

    原来是 unicode 中的invisible times 字符。只是想让你知道这一点,以防其他人出现这样的事情。

    【讨论】:

    • 有趣....SELECT ASCII(SUBSTRING(N'a⁢a',2,1)) 说 63 - 这是“?”如果我没记错的话
    • 是的,它是?,但它是一个UNICODE 字符串。我也只是在第一种情况下考虑了?。 ;-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多