utf8_general_ci
jest bardzo prostym — i w Unicode, bardzo uszkodzonym — sortowaniem, które daje niepoprawne wyniki na ogólnym tekście Unicode. Robi to:
- konwertuje do postaci D normalizacji Unicode w celu rozkładu kanonicznego
- usuwa wszelkie połączone znaki
- konwertuje na wielkie litery
To nie działa poprawnie na Unicode, ponieważ nie rozumie wielkości liter Unicode. Sama wielkość liter Unicode jest znacznie bardziej skomplikowana niż podejście oparte na ASCII. Na przykład:
- Małe litery „ẞ” to „ß”, ale duże „ß” to „SS”.
- Istnieją dwie greckie sigma z małymi literami, ale tylko jedna wielka; rozważ „Σίσυφος”.
- Litery takie jak „ø” nie rozkładają się na „o” plus znak diakrytyczny, co oznacza, że nie będą poprawnie sortowane.
Istnieje wiele innych subtelności.
utf8_unicode_ci
używa standardowego Algorytmu sortowania Unicode , obsługuje tzw. rozszerzenia i ligatury, na przykład:niemiecka litera ß (U+00DF LETTER SHARP S) jest sortowana w pobliżu „ss”Litera Œ (U+0152 LATIN CAPITAL LIGATURE OE) jest sortowana w pobliżu „OE”.
utf8_general_ci
nie obsługuje rozszerzeń/ligatur, sortuje wszystkie te litery jako pojedyncze znaki, czasami w złej kolejności.
utf8_unicode_ci
jest ogólnie dokładniejsze dla wszystkich skryptów. Na przykład w bloku cyrylicy:utf8_unicode_ci
jest w porządku dla wszystkich tych języków:rosyjskiego, bułgarskiego, białoruskiego, macedońskiego, serbskiego i ukraińskiego. 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 nie są dobrze posortowane.
Koszt utf8_unicode_ci
jest to, że jest małe nieco wolniej niż utf8_general_ci
. Ale to cena, jaką płacisz za poprawność. Albo możesz uzyskać szybką odpowiedź, która jest nieprawidłowa, albo nieco wolniejszą odpowiedź, która jest prawidłowa. Twój wybór. Bardzo trudno jest kiedykolwiek uzasadnić udzielanie błędnych odpowiedzi, więc najlepiej 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