Ответ 1
utf8_general_ci
- очень простое - и в Unicode, очень разбитое - сопоставление, которое дает неверные результаты в общем текстовом Unicode. Что он делает:
- преобразуется в форму нормализации Unicode D для канонического разложения
- удаляет любые комбинированные символы
- преобразует в верхний регистр
Это не работает правильно в Юникоде, потому что оно не понимает корпус 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