1

Согласно Microsoft новый SQL Server версии 2014 есть разница в использовании substring function в XQuery:В чем разница между использованием функций XQuery подстроки() между SQL Server 2008 и 2014?

Если уровень совместимости 110 или более поздней версии, каждая суррогатная пара считается как один символ. Для более ранних уровней совместимости они считаются двумя символами.

Что здесь означает «суррогатная пара»? Пожалуйста, дайте несколько примеров, чтобы объяснить эту новую функцию в SQL Server.

ответ

1

Я ожидаю, что это относится к суррогатным парам UTF-16, где два блока кода (в диапазоне от 0xD800 до 0xDFFF) кодируют один символ в диапазоне U + 10000 до U + 10FFFF.

Я интерпретирую заявление, которое вы цитируете, чтобы означать, что более ранние версии интерпретируют каждую кодовую точку как один символ, даже если это на самом деле половина одного символа.

Используя пример из Wikipedia, (U+10437) кодируется как два кодовых точек D801DC37. Старые серверы будут обрабатывать каждую кодовую точку, как если бы это был персонаж в своем собственном праве, а substring мог бы даже разрезать два.

Возьмем конкретный пример, рассмотрим нахождение третьего символа в "abcd":

substring("abcd", 2, 1) 
  • Старшее сервер обрабатывает как две отдельные символы, и поэтому результат "a". (D801DC37бсд).

  • Новый сервер распознает как единый неделимый символ, а результат "b". (бсд).

+0

Я не понимаю эту суррогатную пару. Было бы здорово, если бы объяснялось с помощью некоторого примера. – Gooks

+0

Спасибо @Toby Speight, похоже, что это была ошибка в SQL 2008, тогда как она была решена в SQL 2014, так как теперь точность для вычисления позиции символов будет более точной для UTF-16. – Gooks

+0

@Gooks Если это ответит на ваш вопрос к вашему удовлетворению, вы должны проверить ✔ рядом с ответом, а не оставлять комментарий «Спасибо». Подробнее об этом этикете читайте здесь (https://stackoverflow.com/help/someone-answers). –