在SQL Server 2008和2014之间使用XQuery函数substring()有什么区别?

时间:2016-03-01 18:04:15

标签: sql-server-2008 sql-server-2012 sql-server-2014 xquery-sql

根据Microsoft新SQL Server版本2014,XQuerysubstring function的使用存在差异:

  

如果兼容级别为110或更高,则每个代理项对都将计为单个字符。对于早期的兼容级别,它们被计为两个字符。

“代理对”在这里意味着什么?请提供一些示例来解释SQL Server中的这一新功能。

1 个答案:

答案 0 :(得分:1)

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

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

使用Wikipedia中的示例,U+10437)被编码为两个代码点 D801 DC37 。较旧的服务器会将每个代码点视为一个独立的字符,substring甚至可能将两者分开。

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

substring("abcd", 2, 1)
  • 较旧的服务器将视为两个单独的字符,因此结果为"a"。 ( D801 DC37 <强> B'/ KBD> C d )。

  • 较新的服务器将识别为单个不可分割的字符,结果为"b"。 ( <强> B'/ KBD> C d )。< / p>