如何在不使用重音的情况下搜索具有重音的名称?

时间:2015-04-08 16:10:54

标签: php mysql sql mysqli

示例,我的数据库中有一个名为RoséBrat

的用户

我希望我的用户只能输入 Rose 来搜索Rosé,而不需要重音é。如何使用MySQL,我目前正在使用此查询:

SELECT * FROM users WHERE name LIKE '%$search_query%'

在键入Rose时不会搜索Rosé。

名称是VARCHAR(60)utf8_unicode_ci

3 个答案:

答案 0 :(得分:1)

尝试以下方法之一:

SELECT * FROM users WHERE name LIKE '%$search_query%' collate utf8_general_ci

或:

SELECT * FROM users WHERE name LIKE _utf8'%$search_query%' collate utf8_general_ci

答案 1 :(得分:-1)

你需要看看SOUNDEX()。

尝试类似

的内容
SELECT * FROM users WHERE soundex(name) = soundex(''%$search_query%');

SOUNDEX接受一个单词中的字母/音节,并以这样的方式对它们进行编码,使得听起来相似的单词具有相似的编码值。您可能需要使用它来查看它为您做的搜索条件,但这可能是最简单的方法。

Examples here.

答案 2 :(得分:-1)

你可以考虑soundex,虽然它也可以拉“玫瑰色”“玫瑰色”和“玫瑰色”。

https://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_soundex

可能是这样的:

select * from users where soundex(name) =  soundex('%$search_query%') ; 

可能想要确保使用正确的php绑定来避免任何sql注入。

除此之外,我想到的唯一可能是使用一些正则表达式或翻译来替换可能变得混乱的字符。

相关问题