У нас есть проблемы со сравнением utf8-строк в MySQL 5, касающиеся регистра и акцентов:
Из того, что я собрал, MySQL реализует сопоставления, считая, что «группы символов следует считать равными».
Например, в сопоставлении utf8_unicode_ci
все буквы «EÉÈÊeéèê» находятся в одном поле (вместе с другими вариантами «e»).
Так что если у вас есть таблица, содержащая ["video", "vidéo", "vidÉo", "vidÊo", "vidêo", "vidÈo", "vidèo", "vidEo"] (в столбце varchar, объявленном с сопоставлением ut8_general_ci):
- при запросе MySQL на сортировку строк в соответствии с этим столбцом сортировка происходит случайным образом (MySQL, например, не применяет правило сортировки между "é" и "É"),
- при запросе MySQL о добавленииУникальный ключ в этом столбце вызывает ошибку, так как считает, что все значения равны.
Какой параметр мы можем использовать, чтобы исправить эти две точки?
PS: напримечание, я не вижуЧувствительная сортировка для кодировки utf8.Я что-то пропустил?
[править] Я думаю, что мой первоначальный вопрос все еще вызывает интерес, и я оставлю его как есть (и, возможно, однажды получу положительный ответ).
Оказалось, однако, что наши проблемы со сравнением строк в отношении акцентов не были связаны с сопоставлением наших текстовых столбцов.Это было связано с проблемой конфигурации с параметром character_set_client
при разговоре с MySQL - по умолчанию latin1
.
Вот статья, которая объяснила нам все это и позволила нам решить проблему:
Ад из набора символов MySQL, черт возьми
Это долго, но поверьте мне, вам нужна эта длина, чтобы объяснить и проблему, и исправление.