回答

1

我期望它指UTF-16代理对,其中两个代码单元(范围为0xD800到0xDFFF)编码U + 10000到U + 10FFFF范围内的单个字符。

我将您引用的语句解释为意味着早期版本将每个代码点解释为单个字符,即使它实际上是单个字符的一半。

使用例如从WikipediaU+10437)被编码为两个码点D801DC37。较老的服务器会将每个代码点视为它自己的一个字符,并且substring甚至可能将这两个代码点分开。

举一个具体的例子,考虑"abcd"找到第三个字符:

substring("abcd", 2, 1) 
  • 老服务器将作为两个独立的字符,所以结果是"a"。 (D801DC37一个bÇd)。

  • 较新的服务器将识别为单个不可分割的字符,结果为"b"。 (一个bÇd)。

+0

我不清楚这个代理对。如果通过一些例子来解释会很好。 – Gooks

+0

感谢@Toby Speight,它似乎是SQL 2008中的一个bug,而它已经在SQL 2014中得到解决,因为现在计算字符位置的精度对于UTF-16更精确。 – Gooks

+0

@Gooks如果这回答您的问题令您满意,您应该检查答案旁边的✔,而不是留下“谢谢”评论。阅读更多关于这个礼仪[这里](https://stackoverflow.com/help/someone-answers)。 –

相关问题