utf8_general_ci
е много проста — и на Unicode, много счупена — сортировка, която дава неправилни резултати върху общ текст на Unicode. Това, което прави е:
- преобразува във форма за нормализиране на Unicode D за канонична декомпозиция
- премахва всички комбинирани знаци
- преобразува в главни букви
Това не работи правилно на Unicode, тъй като не разбира главните букви на Unicode. Самият корпус на Unicode е много по-сложен, отколкото може да се справи с ASCII подход. Например:
- Маличните букви на „ẞ“ са „ß“, но главните на „ß“ са „SS“.
- Има две гръцки сигми с малки букви, но само една с главни букви; помислете за „Σίσυφος“.
- Буквите като „ø“ не се разлагат до „o“ плюс диакритика, което означава, че няма да сортира правилно.
Има много други тънкости.
utf8_unicode_ci
използва стандартния алгоритъм за сравняване на Unicode , поддържа така наречените разширения и лигатури, например:немската буква ß (U+00DF LETTER SHARP S) е сортирана близо до "ss" Буквата Œ (U+0152 LATIN CAPITAL LIGATURE OE) е сортирана близо до "OE".
utf8_general_ci
не поддържа разширения/лигатури, сортира всички тези букви като единични знаци и понякога в грешен ред.
utf8_unicode_ci
е по принцип по-точен за всички скриптове. Например на блок на кирилица:utf8_unicode_ci
е добре за всички тези езици:руски, български, беларуски, македонски, сръбски и украински. Докато utf8_general_ci е подходящ само за руски и български подмножество от кирилица. Допълнителните букви, използвани в беларуски, македонски, сръбски и украински, не са подредени добре.
Цената на utf8_unicode_ci
е, че е малко бит по-бавен от utf8_general_ci
. Но това е цената, която плащате за коректност. Или можете да имате бърз отговор, който е грешен, или много малко по-бавен отговор, който е правилен. Вашият избор. Много е трудно някога да оправдаете даването на грешни отговори, така че е най-добре да приемете, че utf8_general_ci
не съществува и винаги да използва utf8_unicode_ci
. Е, освен ако не искате грешни отговори.
Източник:http://forums.mysql.com/read .php?103,187048,188748#msg-188748