Mysql 模糊查询 转义字符
2024-10-08 14:07:05
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为2、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后边的字符串除了会在语法解析时转义一次外,还会在正则匹配时进行第二次的转义。
因此如果期望最终匹配到"\",就要反转义两次,也即由"\"到"\\"再到"\\\\"。
最新文章
- Android App的设计架构:MVC,MVP,MVVM与架构经验谈
- 烂泥:CentOS安装及配置TFTP服务器
- MySQL数据库学习笔记(九)----JDBC的ResultSet接口(查询操作)、PreparedStatement接口重构增删改查(含SQL注入的解释)
- Nginx 常用全局变量 及Rewrite规则详解
- 【开源项目11】组件间通信利器EventBus
- Linux coredump学习笔记
- 使用Preference保存设置
- iOS Xcode工程目录的 folder 和 group的区别(蓝色和黄色文件夹的区别)
- Hadoop MapReduce编程的一些个人理解
- 创建Win32图形界面应用程序
- 移动端click事件延迟300ms到底是怎么回事,该如何解决?
- 浅谈Web的流量控制
- 学习总结------Servlet的简单理解
- Python_二叉树
- GC参考手册 —— GC 算法(实现篇)
- spring cloud 配置zuul实用
- [20190211]简单测试端口是否打开.txt
- python任意进制转换
- Linux学习: LCD驱动
- day29(对象转xml(使用java))