У меня есть база данных, в которой мы храним имена пользователей с заглавной первой буквой каждого имени, то есть IsaacSparling. Я пытаюсь выполнить автозаполнение без учета регистра для моей базы данных MySQL (v5.1.46). Таблица имеет кодировку UTF8 и сортировку utf8_unicode_ci. Я также провел эти тесты с сопоставлением utf8_general_ci.
Обычный текст ASCII работает нормально:
mysql> select username from users where username like 'j%';
+----------------+
| username |
+----------------+
| J******** |
| J*********** |
| J************* |
+----------------+
3 rows in set (0.00 sec)
mysql> select username from users where username like 'J%';
+----------------+
| username |
+----------------+
| J******** |
| J*********** |
| J************* |
+----------------+
3 rows in set (0.00 sec)
(имена отредактированы, но они есть).
Однако, когда я пытаюсь сделать то же самое для символов Юникода вне набора ASCII, мне не повезло:
mysql> select username from users where username like 'ø%';
Empty set (0.00 sec)
mysql> select username from users where username like 'Ø%';
+-------------+
| username |
+-------------+
| Ø********* |
+-------------+
1 row in set (0.00 sec)
Некоторое расследование привело меня к следующему: http://bugs.mysql.com/bug.php?id=19567 (tl; dr, это известная ошибка с сопоставлением юникода, и ее исправление осуществляется с приоритетом «новая функция», т. е. не будет завершено в разумные сроки).
Кто-нибудь обнаружил какие-либо эффективные обходные пути, которые позволяют без учета регистра искать символы Unicode в MySQL? Любые мысли приветствуются!
a
= ݇
- person Pekka   schedule 10.12.2010where LOWER(username) LIKE 'ø%'
? Скорее всего, он будет подвержен тому же поведению, но если это не так, это может служить обходным решением. - person Pekka   schedule 10.12.2010