Разликата между колациите utf8_general_ci и utf8_unicode_ci

И двете колации utf8[mb4]_general_ci и utf8[mb4]_unicode_ci се прилагат върху UTF-8 Unicode кодирани символи в базата данни MySQL. Разликата между тях е начинът, по който се сортира и сравнява текста.

utf8_general_ci:

utf8 – показва към коя кодова система се отнася колацията, в случая това е UTF-8 (Unicode Transformation Format – 8-bit) формат на Уникод кодовете на знаците.

_general – име на колацията; collation – от английски „сравняване“; колацията е набор от правила за сортиране и сравняване на символите;

_ci – case-insensitive; сравняването на символите е нечувствително към регистъра (големи и малки букви), тоест a е еднакво на A;

Важно: От версия MySQL 5.5.3 се предлага и е нужно да се ползва utf8mb4 знакова кодировка, вместо utf8. В случай че приложението ви работи със символи на древни писмености, емоджи, математически/научни символи, емотикони, астрални символи, игрови символи и други пиктографски комплекти, задължително трябва да зададете utf8mb4. Пример за приложения, които поддържат utf8mb4 са Joomla! от версия 3.5 и WordPress от версия 4.2.

Разликата в двете колации _unicode_ci и _general_ci е, че _unicode_ci използва и напълно отговаря на Уникод стандарта за сортиране и сравнение на символите, а _general_ci използва опростен модел за сортиране и сравняване.

Тази разлика в двата метода за сравняване се отразява основно на точността и производителността им.

Точност

utf8mb4_unicode_ci е базиран на Уникод стандарта за сортиране и сравняване, който има много точни резултати при езиците, използващи специфични знаци/символи. utf8mb4_unicode_ci е подходящ за следните езици и техните специфични символи: руски, български, македонски, сръбски, украински и други.

utf8mb4_general_ci не съдържа всички правила на Уникод стандарта, поради което резултатите няма да са точни при определени ситуации и специфични символи/езици. utf8mb4_general_ci може да се използва за български и руски език, но няма да има точността на _unicode_ci при езиците със специални символи като македонски, сръбски, украински, немски и други.

Производителност

utf8mb4_general_ci е по-бърз при извършване на сортирането и сравненията, защото използва методи, оптимизирани за производителност.

Бележка: Тъй като съвременните сървъри са много по-мощни, от тези, по времето на които е създадена тази колация, това увеличение в производителността в днешно време е незначително.

utf8mb4_unicode_ci използва Уникод правилата за сортиране и сравняване. Тъй като се взимат предвид и специфичните за даден език конвенции за сортиране, както и широкият спектър от специални знаци, алгоритъмът за правилно сортиране е сравнително сложен.

Разлика в производителността между двете колации би могла да се усети, но при много специфични не-масово срещани случаи. Най-често, когато става въпрос за забавяне в сортирането или други операции с базата данни, не става въпрос за използваната колация, но за проблем с индексирането или качеството на използваната заявка.

Обновена: 02.04.2022

Беше ли Ви полезна тази статия?

Вижте още