Spec-Zone.ru › MySQL 9.2

12.14 Добавление сортировки к набору символов

  • 12.14.1 Типы реализации сортировок
  • 12.14.2 Выбор идентификатора сортировки
  • 12.14.3 Добавление простой сортировки к 8-битному набору символов
  • 12.14.4 Добавление сортировки UCA к набору символов Unicode
Предупреждение

Пользовательские сортировки устарели; ожидается, что поддержка будет удалена в будущей версии MySQL. Сервер MySQL 9.2 выдает предупреждение при любом использовании COLLATE user_defined_collation в операторе SQL; предупреждение также выдается при запуске сервера с --collation-server установленным равным имени пользовательской сортировки.

Сортировка — это набор правил, определяющих, как сравнивать и сортировать строковые значения. Каждая сортировка в MySQL принадлежит одному набору символов. Каждый набор символов имеет как минимум одну сортировку, а большинство — две или более.

Сортировка упорядочивает символы на основе весов. Каждый символ в наборе символов сопоставляется с весом. Символы с одинаковыми весами считаются равными, а символы с различными весами сравниваются в соответствии с относительным значением их весов.

Функция WEIGHT_STRING() может быть использована для просмотра весов символов в строке. Возвращаемое значение для обозначения весов — это двоичная строка, поэтому удобно использовать HEX(WEIGHT_STRING(str)) для отображения весов в удобочитаемой форме. В следующем примере показано, что веса не различаются для регистров букв в 'AaBb', если это регистронезависимая строка, но различаются, если это двоичная строка:

mysql> SELECT HEX(WEIGHT_STRING('AaBb' COLLATE latin1_swedish_ci));
+------------------------------------------------------+
| HEX(WEIGHT_STRING('AaBb' COLLATE latin1_swedish_ci)) |
+------------------------------------------------------+
| 41414242                                             |
+------------------------------------------------------+
mysql> SELECT HEX(WEIGHT_STRING(BINARY 'AaBb'));
+-----------------------------------+
| HEX(WEIGHT_STRING(BINARY 'AaBb')) |
+-----------------------------------+
| 41614262                          |
+-----------------------------------+

MySQL поддерживает несколько реализаций сортировок, как описано в Разделе 12.14.1, «Типы реализации сортировок». Некоторые из них могут быть добавлены в MySQL без перекомпиляции:

  • Простые сортировки для 8-битных наборов символов.

  • Сортировки на основе UCA для наборов символов Unicode.

  • Двоичные (xxx_bin) сортировки.

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

Предупреждение

Переопределение встроенных сортировок не поддерживается и может привести к неожиданному поведению сервера.

Сводка процедуры добавления новой пользовательской сортировки:

  1. Выберите идентификатор сортировки.

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

  3. Перезапустите сервер.

  4. Убедитесь, что сервер распознает сортировку.

Данные инструкции охватывают только пользовательские сортировки, которые могут быть добавлены без перекомпиляции MySQL. Чтобы добавить сортировку, требующую перекомпиляции (как реализовано с помощью функций в файле исходного кода C), используйте инструкции в Разделе 12.13, «Добавление набора символов». Однако вместо добавления всей информации, необходимой для полного набора символов, просто измените соответствующие файлы для существующего набора символов. То есть, исходя из того, что уже существует для текущих сортировок набора символов, добавьте структуры данных, функции и конфигурационную информацию для новой сортировки.

Примечание

Если вы изменяете существующую пользовательскую сортировку, это может повлиять на порядок строк для индексов по столбцам, которые используют эту сортировку. В этом случае перестройте все такие индексы, чтобы избежать проблем, таких как неправильные результаты запросов. См. Раздел 3.14, «Перестройка или ремонт таблиц или индексов».

Дополнительные ресурсы

  • Пример, показывающий, как добавить сортировку для полнотекстового поиска: Раздел 14.9.7, «Добавление пользовательской сортировки для полнотекстового индексирования»

  • Спецификация алгоритма сортировки Unicode (UCA): http://www.unicode.org/reports/tr10/

  • Спецификация языка разметки данных локалей (LDML): http://www.unicode.org/reports/tr35/

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-9.2-en/adding-collation.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API