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后边的字符串除了会在语法解析时转义一次外,还会在正则匹配时进行第二次的转义。
所以若是指望最终匹配到"\",就要反转义两次,也即由"\"到"\\"再到"\\\\"。
相关文章
相关标签/搜索