根据Microsoft新SQL Server版本2014,XQuery
中substring
function的使用存在差异:
如果兼容级别为110或更高,则每个代理项对都将计为单个字符。对于早期的兼容级别,它们被计为两个字符。
“代理对”在这里意味着什么?请提供一些示例来解释SQL Server中的这一新功能。
答案 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>