2016-10-14 60 views
1

我想知道是否有可能通過一個MySQL字段搜索,其中場可能有這樣的事情:MySQL的搜索沒有任何特殊字符

test - hello 

,但你在一個字符串從用戶有

test: hello 

很明顯,在PHP端很容易剝離任何特殊字符的字符串,但是可以通過MySQL行搜索並忽略特殊字符?

+4

基本上使用全文索引。否則,不,你不能「忽略」字符。這是你的代碼必須做的事情,而不是mysql。 –

回答

0

,如果你查找和替換所有這樣的特殊字符,並從用戶的輸入也列空間,便有可能, 即

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

嗯,這是一個相當新穎的方法,可能會給它一個去,謝謝! – NaughtySquid

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表達式添加一個虛擬列,併爲該虛擬列編制索引。這將有助於表現很多。