utf8_general_ci
jest bardzo prosta - i na Unicode, bardzo łamanego - zestawień, jeden, który daje nieprawidłowych wyników na ogólnych tekstu Unicode. Co robi jest:
- konwertuje do Unicode formularza normalizacja D do rozkładu kanonicznego
- usuwa wszelkie łączenie znaków
- zamienia się wielkimi literami
To nie działa poprawnie na Unicode, gdyż nie rozumie obudowy Unicode. Samo kodowanie Unicode jest o wiele bardziej skomplikowane, niż może obsłużyć podejście ASCII. Na przykład:
- Małe litery "ẞ" to "ß", ale wielkie litery "ß" to "SS".
- Istnieją dwie małe litery greckie, ale tylko jedna wielka; rozważ "Σίσυφος".
- Litery takie jak "ø" nie rozkładają się na "o" plus znak diakrytyczny, co oznacza, że nie posortuje się poprawnie.
Istnieje wiele innych subtelności.
utf8_unicode_ci
wykorzystuje standard Unicode Collation Algorithm, wspiera tzw ekspansje i ligatury, na przykład: niemieckie SS nas (U + 00DF LIST SHARP S) jest sortowany w pobliżu "ss" List OE (U + 0152 LATIN CAPITAL podwiązanie OE) jest sortowane w pobliżu "OE".
utf8_general_ci
nie obsługuje rozszerzające/ligatur, sortuje wszystkie te listy jako pojedynczych znaków, a czasami w niewłaściwej kolejności.
utf8_unicode_ci
jest ogólnie bardziej dokładne dla scenariuszy. Na przykład na cyrylicy: utf8_unicode_ci
jest w porządku dla wszystkich tych języków: Rosyjski, bułgarski, białoruski, macedoński, serbski i ukraiński. Podczas gdy utf8_general_ci jest w porządku tylko dla rosyjskiego i bułgarskiego podzbioru cyrylicy. Dodatkowe litery używane w białoruskim, macedońskim, serbskim i ukraińskim są sortowane nie za dobrze.
Koszt utf8_unicode_ci
jest to, że jest to trochę nieco wolniej niż utf8_general_ci
. Ale to cena, którą płacisz za poprawność. Albo możesz otrzymać szybką odpowiedź, która jest zła, albo bardzo nieznacznie wolniejszą odpowiedź, która jest właściwa. Twój wybór. Bardzo trudno jest uzasadnić udzielanie błędnych odpowiedzi, więc najlepiej jest założyć, że utf8_general_ci
nie istnieje i zawsze używać utf8_unicode_ci
. Cóż, chyba że chcesz złych odpowiedzi.
Źródło: http://forums.mysql.com/read.php?103,187048,188748#msg-188748
Zobacz również http://stackoverflow.com/questions/766809/whats-the-difference-between-utf8-general-ci-and-utf8-unicode-ci – unor