среда, 15 сентября 2010 г.

utf_general_ci или utf_unicode_ci в MySQL

Еще во время перевода программ на юникод (как раз вышел MySQL 5) задался этим вопросом. Но как то сортировка по буквам во всех проектах была не критична потому использовался utf_general_ci.
Через н-ное время  в одном проекте это стало важно, так как данные там сортировались исключительно по буквам. Данные были на украинском языке котором есть три специфические буквы і, ї и ґ. Сортировка данных давала не верные результаты. Сервер не понимал разницу между специфическими и некоторыми другими буквами. Нужно было найти решение, первое временное решение было явно указывать какая буква идет за какой. После его реализации появилось время на поиск нормально решения проблемы так как сортировка была слишком долгой.
Вообщем за короткое время было найдено решение. Кстати при поиске я поразился на сколько же атрофировано украинское сообщество разработчиков. Вообщем оказалось все интересно

utf8_general_ci не различает некоторые буквы, в том числе специфические

utf8_unicode_ci различает но видимо в этом причина медленной выборки. разница точно не измерял но говорят не критична, кстати надо будет как то попробовать, как раз есть подходящая база.

Кстати utf8_bin видит каждый символ по отдельность, с таким колейтом хорошо делать поиск но сортировка ясно по коду, что не подходит.

Так что если Вам нужна сортировка берем utf8_unicode_ci если нужен поиск то наш выбор utf8_bin.

Комментариев нет:

Отправить комментарий