EMZETT.
Войти

Сортировка и collation: как сравниваются тексты

Коротко: Collation определяет, как строки сравниваются и сортируются: регистр, диакритика, правила языка. Она решает, окажется ли «ä» до «z» или после.

Подробнее: Компьютеры сравнивают текст не по алфавиту, а по правилам. Простые правила (по кодовой точке) быстры, языково корректные (Unicode collation) сложнее, но осмысленнее для людей.

Подробности

  • Двоичная: Сравнение по значению байта или кодовой точки. «Z» идёт перед «a», «ä» в самом конце. Быстро, но непривычно для пользователей.
  • С учётом языка: Немецкий сортирует «ä» вместе с «a», шведский — в конце алфавита. В базах данных как de_DE, utf8mb4_unicode_ci, und-x-icu и т. д.
  • Уровни: С учётом регистра или без (ci/cs), с учётом диакритики или без (ai/as).
  • Последствия: Уникальность (UNIQUE) зависит от collation: «Anna» и «anna» при ci считаются равными. Индексы зависят от collation.
  • Обновление: Если версия операционной системы или библиотеки меняет правила сортировки, индексы могут стать недействительными (PostgreSQL предупреждает об этом).
  • Программирование: Сравнение строк по умолчанию в языках программирования обычно двоичное. Для списков для пользователей используйте Intl.Collator, locale.strxfrm и подобное.

См. также: Unicode, UTF-8