Spec-Zone.ru › MySQL 8.4

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

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

Пользовательские сортировки устарели; ожидается, что поддержка их будет удалена в будущих версиях MySQL. Сервер MySQL 8.4 выдает предупреждение при любом использовании 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-8.4-en/adding-collation.html

Spec-Zone.ru

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