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,雙引號。用’\」’表示。
一個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
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%";
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的第二行,應該像下邊這樣查詢。
進一步,若是指望查詢到的結果更準確,好比只獲得id爲2的第二行,應該像下邊這樣查詢。
select * from test_table where text like "%24\\\\a%";
同理,只獲得id爲3的第三行,匹配兩個反斜槓"\\",應該使用八個反斜槓"\\\\\\\\":
同理,只獲得id爲3的第三行,匹配兩個反斜槓"\\",應該使用八個反斜槓"\\\\\\\\":
select * from test_table where text like "%24\\\\\\\\a%";
緣由其實很簡單,在mysql中,反斜槓在字符串中是轉義字符,在進行語法解析時會進行一次轉義,
因此當咱們在insert字符時,insert "\\" 在數據庫中最終只會存儲"\"。
而在mysql的like語法中,like後邊的字符串除了會在語法解析時轉義一次外,還會在正則匹配時進行第二次的轉義。
所以若是指望最終匹配到"\",就要反轉義兩次,也即由"\"到"\\"再到"\\\\"。
因此當咱們在insert字符時,insert "\\" 在數據庫中最終只會存儲"\"。
而在mysql的like語法中,like後邊的字符串除了會在語法解析時轉義一次外,還會在正則匹配時進行第二次的轉義。
所以若是指望最終匹配到"\",就要反轉義兩次,也即由"\"到"\\"再到"\\\\"。