我想知道是否有可能通過一個MySQL字段搜索,其中場可能有這樣的事情:MySQL的搜索沒有任何特殊字符
test - hello
,但你在一個字符串從用戶有
test: hello
很明顯,在PHP端很容易剝離任何特殊字符的字符串,但是可以通過MySQL行搜索並忽略特殊字符?
我想知道是否有可能通過一個MySQL字段搜索,其中場可能有這樣的事情:MySQL的搜索沒有任何特殊字符
test - hello
,但你在一個字符串從用戶有
test: hello
很明顯,在PHP端很容易剝離任何特殊字符的字符串,但是可以通過MySQL行搜索並忽略特殊字符?
,如果你查找和替換所有這樣的特殊字符,並從用戶的輸入也列空間,便有可能, 即
select * from tablename where replace(replace(columnname,' ',''),':',''),'-','')=replace(replace([USER INPUT],' ',''),':',''),'-','');
嗯,這是一個相當新穎的方法,可能會給它一個去,謝謝! – NaughtySquid
可以排序的「忽略」特殊字符,空格等使用該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表達式添加一個虛擬列,併爲該虛擬列編制索引。這將有助於表現很多。
基本上使用全文索引。否則,不,你不能「忽略」字符。這是你的代碼必須做的事情,而不是mysql。 –