我想知道是否可以在MySQL字段中搜索该字段可能具有以下内容:
test - hello
但你有来自用户的字符串
test: hello
显然在PHP端很容易删除任何特殊字符的字符串,但是可以搜索MySQL行并忽略特殊字符吗?
答案 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%'