Mysql 模糊查詢 轉義字符

MySQL的轉義字符「\」
\0  
一個ASCII  0  (NUL)字符。   
\n   
一個新行符。   
\t   
一個定位符。   
\r   
一個回車符。   
\b   
一個退格符。   
\'   
一個單引號(「'」)符。   
\  "   
一個雙引號(「  "」)符。   
\\   
一個反斜線(「\」)符。   
\%   
一個「%」符。它用於在正文中搜索「%」的文字實例,不然這裏「%」將解釋爲一個通配符。   
\_
 
select 'ab\'ab' as a,'ab\"ab' as b, 'ab\tab' as c, 'ab\bab' as d,'ab\\ab' as e,'ab\\\\ab' as f,'ab\nab' as g;
 
若是你想要把二進制數據插入到一個BLOB列,下列字符必須由轉義序列表示:   
NUL        ASCII  0。你應該用'\0'(一個反斜線和一個ASCII  '0')表示它。   
\                ASCII  92,反斜線。用'\\'表示。 
'            ASCII  39,單引號。用’\’’表示。   
"                ASCII  34,雙引號。用’\」’表示。
 
當SQL語句中使用Like查詢,且指望匹配的結果中含有"\"的,應當把"\"替換爲"\\\\"。
    好比數據庫中text字段有如下三行:
id               text
1                au1224 su5b9e1u9a8c
2                \24\a su5b9e1u9a8c
3                \24\\a su5b9e1u9a8c
當咱們使用下面這三種方式查詢時,都會獲得id 爲1,2,3三行,緣由後面會講。
select * from test_table where text like "%\24%";
select * from test_table where text like "%\\24%";
select * from test_table where text like "%\\\24%";
只有像下面這樣使用四個反斜槓"\\\\"查詢時,纔會獲得指望的包含"\24"的結果(id爲二、3的兩行)。
select * from test_table where text like "%24\\\\%";
進一步,若是指望查詢到的結果更準確,好比只獲得id爲2的第二行,應該像下邊這樣查詢。
select * from test_table where text like "%24\\\\a%";
同理,只獲得id爲3的第三行,匹配兩個反斜槓"\\",應該使用八個反斜槓"\\\\\\\\":
select * from test_table where text like "%24\\\\\\\\a%";
 
緣由其實很簡單,在mysql中,反斜槓在字符串中是轉義字符,在進行語法解析時會進行一次轉義,
因此當咱們在insert字符時,insert "\\" 在數據庫中最終只會存儲"\"。
而在mysql的like語法中,like後邊的字符串除了會在語法解析時轉義一次外,還會在正則匹配時進行第二次的轉義。
所以若是指望最終匹配到"\",就要反轉義兩次,也即由"\"到"\\"再到"\\\\"。
相關文章
相關標籤/搜索