У меня есть таблица MySQL с двумя столбцами, как с utf8_unicode_ci. Он содержит следующие строки. За исключением ASCII, второе поле также содержит кодовые точки Unicode, такие как U + 02C8 (MODIFIED LETTER VERTICAL LINE) и U + 02D0 (MODIFIED LETTER TRIANGULAR COLON).
word | ipa
--------+----------
Hallo | haˈloː
IPA | ˌiːpeːˈʔaː
Мне нужно искать второе поле с LIKE и REGEXP, но MySQL (5.0.77), кажется, интерпретирует эти поля как байты, а не как символы.
SELECT * FROM pronunciation WHERE ipa LIKE '%ha?lo%'; -- 0 rows
SELECT * FROM pronunciation WHERE ipa LIKE '%ha??lo%'; -- 1 row
SELECT * FROM pronunciation WHERE ipa REGEXP 'ha.lo'; -- 0 rows
SELECT * FROM pronunciation WHERE ipa REGEXP 'ha..lo'; -- 1 row
Я абсолютно уверен, что данные хранятся правильно, так как кажется хорошим, когда я его извлекаю и хорошо отображается в phpMyAdmin. Я нахожусь на общем хосте, поэтому я не могу установить программы.
Как я могу решить эту проблему? Если это невозможно: существует ли правдоподобная работа, которая не требует обработки всей базы данных с помощью PHP каждый раз? Есть 40 000 строк, и я не настроен на использование MySQL (или UTF8, если на то пошло). У меня есть только доступ к PHP и MySQL на хосте.
Изменить: Существует открытый 4-летний отчет об ошибке MySQL, Ошибка # 30241 Проблемы с регулярным выражением, который отмечает, что двигатель regexp работает побайтно. Таким образом, я ищу работу.