Яка різниця між сортуванням utf8_general_ci та utf8_unicode_ci?

utf8_unicode_ci також підтримує скорочення та ігноровані символи. utf8_general_ci — це застаріле зіставлення, яке не підтримує розгортання, згортання або ігноровані символи. Він може робити лише однозначне порівняння між символами.

Якщо ви вирішите використовувати UTF-8 як сортування, завжди використовуйте utf8mb4 (зокрема utf8mb4_unicode_ci). Ви не повинні використовувати UTF-8, оскільки UTF-8 MySQL відрізняється від правильного кодування UTF-8. Це тому, що він не пропонує повної підтримки Unicode, що може призвести до втрати даних або проблем із безпекою.

Набір символів — це набір символів і кодувань. Зіставлення — це набір правил для порівняння символів у наборі символів.

UTF-8 кодує символи Unicode у послідовність 8-бітних байтів. Стандарт містить більше мільйона різних кодових точок і є надмножиною всіх символів, які сьогодні широко використовуються. Для порівняння, ASCII (Американський стандартний код для обміну інформацією) містить 128 кодів символів.

Як бачите, основна відмінність між utf8, utf8mb3 і utf8mb4 полягає в максимальній кількості байтів на символ. utf8 і utf8mb3 можуть зберігати символи лише в базовій багатомовній площині (BMP), тоді як utf8mb4 також може зберігати символи в додатковій площині.

utf8_unicode_ci також підтримує скорочення та ігноровані символи. utf8_general_ci — це застаріле зіставлення, яке не підтримує розгортання, згортання або ігноровані символи. Він може робити лише однозначне порівняння між символами.