mysql LIKE和正则表达式VS RLIKE和变音符号
问题描述:
我需要实现一个小搜索引擎。问题是,数据库内部的数据使用的是字母而不是字母,例如字母和数字。我需要找到他们的可能性。我可以用我的正则表达式生成器功能很容易做到这一点:mysql LIKE和正则表达式VS RLIKE和变音符号
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 $字符串<。到现在为止还挺好。
但是在数据库中也有“Renés”。当我使用RLIKE时,我无法通过输入“Rene”找到它们。另一方面,如果我使用> LIKE $字符串<,它会在输入“Rene”时找到“René”,但在那里不能使用正则表达式。
我搜索了几个小时,现在我也发现了几个类似的主题。但迄今为止还没有真正的解决方案。
我认为我可以选择字段并像REPLACE(field,[^ a-z],'_')(无效代码)一样对其应用REGEX REPLACE并使用LIKE。
有没有人有线索?
答
好的,我自己找到了答案。这可能不是最佳实践。但我工作正常。所以,如果你有一对夫妇的字符可能被写,否则像是在德国“ö”我的情况下,“大江”,你可以建立这样的查询:
... WHERE REPLACE(LOWER(c_name), 'ö', 'oe') COLLATE utf8_general_ci
LIKE '".mysqli_real_escape_string($link, $search)."' ...
这时就会发现不仅“möglich”通过搜索“刘若英”(反之亦然),键入“moeglich”(反之亦然),也有“勒”
另外你在搜索查询变换角色太:
$string = str_replace(array('ä', 'ö', 'ü', 'ß'),
array('ae', 'oe', 'ue', 'ss'),
mb_strtolower($string));
多数民众赞成它。我希望这可以帮助某人:)
有趣的方法名称。 –
很高兴你喜欢它3 :) – Bernhard
你的mysql版本是什么? –