MySQL搜索没有任何特殊字符

时间:2016-10-14 18:31:51

标签: php mysql

我想知道是否可以在MySQL字段中搜索该字段可能具有以下内容:

test - hello

但你有来自用户的字符串

test: hello

显然在PHP端很容易删除任何特殊字符的字符串,但是可以搜索MySQL行并忽略特殊字符吗?

3 个答案:

答案 0 :(得分:0)

如果您从用户输入列中找到并替换所有此类特殊字符和空格,则可以 即。

select * from tablename where replace(replace(columnname,' ',''),':',''),'-','')=replace(replace([USER INPUT],' ',''),':',''),'-','');

答案 1 :(得分:0)

你可以选择"忽略"特殊字符,空格等使用SOUNDEX()函数:

mysql> select soundex('test - hello'), soundex('test: hello');
+-------------------------+------------------------+
| soundex('test - hello') | soundex('test: hello') |
+-------------------------+------------------------+
| T234                    | T234                   |
+-------------------------+------------------------+

因此,您可以像这样搜索您的数据:

SELECT ...
FROM MyTable
WHERE SOUNDEX(somefield) = SOUNDEX('test: hello');

这根本不可转录,因此它将被迫进行表扫描。如果使用MySQL 5.7,则可以为soundex表达式添加虚拟列,并为该虚拟列编制索引。这将有助于表现。

答案 2 :(得分:0)

另一个独特的解决方案是在每个单词之间放置通配符。只要搜索词中没有特殊字符,在忽略结果中任何特殊字符的情况下,都会返回正确的结果。

例如...

SELECT *
FROM myTable
WHERE somefield LIKE '%test%hello%'