У меня есть таблица MySQL с двумя столбцами, оба с разбором utf8_unicode_ci. Он содержит следующие строки. За исключением ASCII, второе поле также содержит кодовые точки Unicode, такие как U + 02C8 (ВЕРТИКАЛЬНАЯ ВЕРТИКАЛЬНАЯ ПИСЬМА ИЗМЕНЕННОГО ПИСЬМА) и U + 02D0 (ТРЕУГОЛЬНЫЙ КОЛОН ИЗМЕНЕННОГО ПИСЬМА).
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 Проблемы с регулярными выражениями , в котором отмечается, что механизм регулярных выражений работает побайтово. Таким образом, я ищу обходной путь.