У меня есть база данных MySQL с кодировкой по умолчанию, установленной на utf8. Так что не должно быть проблем с работой с символами, которые не являются ASCII. Но это кажется немного сложнее, когда дело доходит до регулярных выражений с помощью команды REGEXP.
Я пытаюсь запрашивать записи, основанные на регулярных выражениях, с использованием подстановочных знаков. Функции, которые предлагает MySQL, достаточны для меня, но они кажутся слегка нарушенными в том смысле, что не-ASCII-символы (я пробовал § и °) не соответствуют ни одному символу подстановки, а двум.
Например, если я ищу вики-страницу с именем '§123', которая находится в базе данных, тогда
SELECT * FROM wikipages WHERE title REGEXP '^.123$'
ничего не вернет, но
SELECT * FROM wikipages WHERE title REGEXP '^..123$'
возвращает нужную страницу (обратите внимание на дополнительный символ подстановки).
Для символов ASCII необходим только один символ подстановки. Я предполагаю, что это связано с тем, сколько байтов используется для кодирования символа в utf8. Однако я нахожу это поведение довольно уродливым, поскольку не могу работать с регулярными выражениями, если MySQL не обрабатывает все символы одинаково.
Есть ли на самом деле веская причина, почему она не работает так, как подозревают? А у кого-нибудь есть идеи, как решить мою проблему?
Заранее спасибо!