MySQL 特殊字符轉義問題

模糊查詢時,不少特殊字符都是有特定意義的,好比%、_等,這些在模糊查詢中都是通配符。前端

若是用戶在前端的輸入是沒有限制的,那麼,一旦輸入相關特殊字符,就會得到錯誤的查詢結果,出於需求的細緻要求,這個問題是須要解決的。java

在網上找了不少資料,發現可以徹底把這個問題解決的答案不多或者不少都不完整,本身在找資料解決問題後,發一下我認爲交優的解決辦法吧。數據庫

若是持久化框架使用的是MyBatis,那麼直接使用一下代碼便可:框架

SELECT * FROM table_name 
WHERE clo LIKE CONCAT ('%/',#{testClo},'%') ESCAPE '/'

首先,在數據庫中的轉義字符一般是反斜槓「\」,而且只有緊挨着的字符會被轉義,好比說:"\%",這裏的%被轉義成普通字符而不是通配符,可是若是"\電%",這個%仍是通配符。code

其次,escape 用於定義轉義字符,這裏將斜槓"/"定義成轉義符。字符串

最後,由於MyBatis是直接把testClo中的內容傳遞過來的,因此前面的「/」會把testClo中全部的特殊字符都轉義成普通字符而無論中間是否有其餘字符串隔開。table

這樣就能夠實現不管前端輸了什麼東西進來,都不會再有特殊字符致使錯誤的問題了。class

值得注意的是:這是框架級的代碼而不是數據庫級的代碼,也就是說,若是你直接在數據庫中這樣寫,是不行的。或者說,這是MyBatis支持的一種方法。test

相關文章
相關標籤/搜索