UTF8 сравнения строк в MySQL - PullRequest
       5

UTF8 сравнения строк в MySQL

5 голосов
/ 11 августа 2011

У нас есть проблемы со сравнением 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, черт возьми

Это долго, но поверьте мне, вам нужна эта длина, чтобы объяснить и проблему, и исправление.

1 Ответ

2 голосов
/ 11 августа 2011

Используйте параметры сортировки, в которых эти символы различаются. Может быть, utf8_bin (чувствителен к регистру, поскольку он выполняет двоичное сравнение символов)

http://dev.mysql.com/doc/refman/5.7/en/charset-unicode-sets.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...