Осторожно при работе с кириллицей в MySQL

Наткнулись на странное поведение MySQL при работе с кириллицей , опытным путем выявили, что действительно MySQL, если выбрать кодировку Unicode, считает, что «е» и «ё» — это одно и то же. Погуглив в интернете можно найти подтверждение этого факта. Для нас это чревато тем, что в коде нашего ПО надо будет учитывать эту особеннсть при построении временного Кэша. Самое интересное в этой истории - это то слово, на котором мы увидели эту проблему: "встроенный в дверь ледогенератор".

 

Цитата из блога Внимание: MySQL считает, что буквы «ё» и «е» — одно и то же. Блог Евгения Степанищева

Внимание: MySQL считает, что буквы «ё» и «е» — одно и то же. Увы, MySQL, если выбрать кодировку Unicode, считает, что «е» и «ё» — это одно и то же. Багом это не считается, в официальной таблице, где описано как MySQL 6.0 сравнивает символы, эти символы в одном ряду. mysql> set names utf8 collate utf8_unicode_ci; Query OK, 0 rows affected (0.00 sec) mysql> select 'е'='ё', 'ё'='ѐ'\G *************************** 1. row *************************** 'е'='ё': 1 'ё'='ѐ': 1 1 row in set (0.00 sec) Самое печальное, это нелогичное поведение всплывает, если есть потребность перевести базу с CP1251 на UTF-8, так как в CP1251-то как раз всё хорошо: mysql> set names cp1251; Query OK, 0 rows affected (0.00 sec) mysql> select 'е'='ё', 'ё'='ѐ'\G *************************** 1. row *************************** 'е'='ё': 0 'ё'='ѐ': 0 1 row in set (0.00 sec)