在開發中,測試提出了一個bug,在某搜索中,搜索 _,結果把不包含下劃線的內容也查了出來!這是什麼問題呢?今天特此記錄一下,順便給大家分享下!
原sql:select * from table where condition like '%_%';
結果: 搜索出來的是全部。
原來,在mysql 中,下劃線 _ 代表 全部 基本上等同於 *。
解決方案:
對sql 用 \ 進行轉義:
最終達到的 sql效果 :select * from table where condition like '%\_%';
在此之前,在程序中對該關鍵字進行轉義。
方法如下:(我接觸的是nodejs,此處就用js來表達);
const search = function(str){
if(str){
let aStr = Array.from(str); // 將字符轉成數組
for(let i = 0;i < aStr.length; i++){ // 遍歷數組
if(aStr[i]=='_'){ // 如果檢測到下劃線
aStr[i] = '\\_'; // 此處需要轉譯 \_ 所以用兩個\
}
}
str = aStr.join(''); // 把數組轉成字符串
}
// 下面執行 你的數據庫操作
...
}
希望能幫到各位小夥伴!