Мне нужно реализовать небольшую поисковую систему. Проблема в том, что внутри базы данных есть данные, в которых вместо букв типа ä ö ü используются буквы ae oe ue. Мне нужна возможность найти их. Я могу легко сделать это с помощью моей функции генератора регулярных выражений:
function shittyumlauts($string){
$string = mb_strtolower($string);
$string = preg_replace('/(Ä|ä|ae)/i', '(ä|ae)', $string);
$string = preg_replace('/(Ö|ö|oe)/i', '(ö|oe)', $string);
$string = preg_replace('/(Ü|ü|ue)/i', '(ü|ue)', $string);
return $string;
}
Я поместил его в запрос с >RLIKE $string‹. Все идет нормально.
Но есть в базе и «Ренес». Когда я использую RLIKE, я не могу найти их, введя «Rene». С другой стороны, если я использую >LIKE $string‹, он находит «Rene» при вводе «Rene», но использование регулярного выражения здесь невозможно.
Я гуглил уже несколько часов и нашел здесь несколько похожих тем. Но реального решения пока нет.
Я подумал, что могу ВЫБРАТЬ поля и применить к ним REGEX REPLACE, например REPLACE(поле, [^a-z], '_') (недопустимый код) и использовать LIKE.
У кого-нибудь есть ключ?
LIKE
понимает эти символы.RLIKE
работает с байтами, а не с символами. - person Rick James   schedule 06.03.2016