Spec-Zone.ru › MySQL 5.7

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

  • 10.14.1 Типы реализаций сортировок
  • 10.14.2 Выбор идентификатора сортировки
  • 10.14.3 Добавление простой сортировки к набору символов 8-битного типа
  • 10.14.4 Добавление сортировки UCA к набору символов Unicode

Сортировка — это набор правил, определяющих, как сравнивать и сортировать строковые значения. Каждая сортировка в 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 поддерживает несколько реализаций сортировок, как описано в разделе 10.14.1, «Типы реализаций сортировок». Некоторые из них можно добавить в MySQL без перекомпиляции:

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

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

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

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

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

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

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

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

  4. Проверьте, распознаёт ли сервер сортировку.

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

Примечание

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

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

  • Пример того, как добавить сортировку для полнотекстового поиска: раздел 12.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-5.7-en/adding-collation.html

Spec-Zone.ru

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