mysql-LIKE和regex VS-RLIKE和diacritics

mysql-LIKE和regex VS-RLIKE和diacritics,mysql,regex,sql-like,rlike,Mysql,Regex,Sql Like,Rlike,我需要实现一个小搜索引擎。问题是,数据库中的数据使用的不是像äöüae oe ue这样的字母。我需要找到他们的可能性。我可以使用我的正则表达式生成器函数轻松完成此操作: function shittyumlauts($string){ $string = mb_strtolower($string); $string = preg_replace('/(Ä|ä|ae)/i', '(ä|ae)', $string); $string = preg_replace('/(Ö|ö|oe)

我需要实现一个小搜索引擎。问题是,数据库中的数据使用的不是像äöü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$stringLIKE$string把它放到查询中好的,我自己找到了答案。这当然不是最好的做法。但我工作得很好。因此,如果您有几个字符可以用其他方式书写,比如在我的例子中,德语“ö”作为“oe”,您可以这样构建您的查询:

... WHERE REPLACE(LOWER(c_name), 'ö', 'oe') COLLATE utf8_general_ci 
    LIKE '".mysqli_real_escape_string($link, $search)."' ...
然后,它不仅会通过键入“moeglich”(反之亦然)找到“möglich”,还会通过搜索“rene”(反之亦然)找到“rene”

此外,还必须转换搜索查询中的字符:

  $string = str_replace(array('ä', 'ö', 'ü', 'ß'),
                        array('ae', 'oe', 'ue', 'ss'),
                        mb_strtolower($string));

就这样。我希望这能帮助一些人:)

有趣的方法名称。很高兴你喜欢它3:)你的mysql版本是什么?它是5.6.28-76.1-logok。我有另一个想法可以用。我会尽快试一试。当从数据库中选择字母时,我需要替换字母äöüßto ae oe ue ss,并且我对输入数据也这样做。查询将使用LIKE then进行。我认为这应该行得通。