Collation - правила, за якими база порівнює й сортує рядки: чи «а» дорівнює «А», чи «е» дорівнює «є», де в абетці «ґ». Він впливає на ORDER BY, =, LIKE, GROUP BY і унікальні індекси.
MySQL:
- Кодування має бути
utf8mb4. Старийutf8(теперutf8mb3) зберігає лише до 3 байтів на символ і не вміщує емодзі. - Collation за замовчуванням у MySQL 8 -
utf8mb4_0900_ai_ci: нечутливий до регістру й діакритики (ai- accent-insensitive,ci- case-insensitive). Звідси сюрпризи:WHERE email = 'IVAN@x.com'знаходитьivan@x.com, а унікальний індекс не пустить і «Ivan», і «ivan». - Для точних порівнянь (токени, хеші) -
_binабоutf8mb4_0900_as_cs.
PostgreSQL:
- Порівняння за замовчуванням чутливе до регістру. Для пошуку без урахування регістру -
ILIKE,lower(email)з функціональним індексом, розширенняcitextабо недетерміністичний ICU-collation. - Collation бази залежить від локалі ОС (glibc). Оновлення glibc може змінити порядок сортування і зіпсувати наявні індекси за текстовими колонками - їх доводиться перебудовувати (
REINDEX). Тому все частіше використовують ICU-collation з контрольованою версією.
Українська абетка: щоб «ґ» стояла після «г», а «і», «ї» - на своїх місцях, потрібен collation з українською локаллю (наприклад, ICU uk-x-icu у PostgreSQL). Якщо база такого не має, сортують у застосунку через Collator з розширення intl.