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