MySQL查詢時使用LIKE匹配下划線,您會發現連查詢“%A_B%”時會出現“%A B%”和“%AB%”也查詢出來了,這是因為下划線也被當作特殊字符,做了任意匹配轉換了,所以,要想匹配下划線,那么就需要“轉義”一下。轉義的方法有如下(示例想查詢A_B匹配字段)。
一、使用Escape轉義
示例:
SELECT * FROM mytable WHERE col LIKE '%A#_B%' ESCAPE '#';
或,
SELECT * FROM mytable WHERE col LIKE '%A\_B%';
其中#符號隨意寫,只是告訴解析器把這個字符當特殊字符解析。“\”則默認按照轉義字符解析。
二、使用終括號[]轉義
示例:SELECT * FROM mytable WHERE col LIKE '%A[_]B%';
其它方法,還有使用instr函數查詢等方式,不過,那樣把簡單問題搞復雜了,不推薦。
以上查詢方法限定的是已知的LIKE字符串,而對於用戶輸入的關鍵字,則需要解析,並對可能出現的Underline字符特殊替換處理即可。
參考資料:
http://dev.mysql.com/doc/refman/5.7/en/string-comparison-functions.html