Mysql 模糊查询 转义字符
生活随笔
收集整理的這篇文章主要介紹了
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為2、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后邊的字符串除了會在語法解析時轉義一次外,還會在正則匹配時進行第二次的轉義。
因此如果期望最終匹配到"\",就要反轉義兩次,也即由"\"到"\\"再到"\\\\"。
一個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為2、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后邊的字符串除了會在語法解析時轉義一次外,還會在正則匹配時進行第二次的轉義。
因此如果期望最終匹配到"\",就要反轉義兩次,也即由"\"到"\\"再到"\\\\"。
轉載于:https://www.cnblogs.com/a-s-m/p/11075903.html
總結
以上是生活随笔為你收集整理的Mysql 模糊查询 转义字符的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 博客园背景设置CSS代码
- 下一篇: 睡前故事100篇全集