Java查询Mysql数据库时,查询条件带有反斜线\的处理方式
一. 知识储备
1. 在Java中使用反斜线如果想用字符串表示一个反斜线,则需要使用""。直接使用""会报错。
原因在于: java编译器会误以为是用来转义后面跟着的"符号。
2. 在正则表达式中使用反斜线首先,目标字符串中的""会被编译器解析成"",接着,作为正则表达式,又会将""当做转义符,把表达式内的""转义成""。
所以在正则表达式中如果想匹配""(一个反斜线),必须使用"\"(四个反斜线)。
转换过程: "\" -> "" -> ""
3. 在Mysql中查询带有反斜线的字符串Mysql中,默认不启用NO_BACKSLASH_ESCAPES 模式,也即会将""作为转义字符而不是一个普通字符来解析。
下方是Mysql8.0的参考文档: Mysql8.0 doc
官方告知我们,""会将转义表中出现的字符进行转义,但对于那些没有在转义表中字符,反斜线会在解析时被忽略。(我用红色的线勾出来了)
回过头来看看"",其中前两个""反斜线会被解析成"",但大家注意到,现在还剩下一个""反斜线呢,它后面没有跟任何字符,因此在解析时会被忽略!
再来看看Mysql在查询中对""的解析,Mysql中精确查询和模糊查询对""的解析稍有差别。
比如现在有一张表 country,有字段 id 和name
1. 精确查询
只需要对目标字符串内""当作转义符进行一次解析即可。
查询语句1: select * from country where name="中国";
由于与""相连的字符不在转义表内,因此""将被忽略,实际查询的结果为"中国"。
查询语句2: select * from country where name="中国";
由于""在转义表内,可以被解析成"",因此实际查询的结果为"中国"。
查询语句3: select * from country where name="中国";
由于""在转义表内,可以前两个右斜线被解析成"",但第三个右斜线孤立一人,后面没有跟任何字符,不在转义表中,会被忽略。因此实际查询的结果为"中国"。
2. 模糊查询
经历了两次解析过程,"编译器解析"和"正则表达式解析"。
查询语句1: select * from country where name like '中国';
经过"编译器解析"后, "中国"被解析为"中国",接着经过"正则表达式解析"后,"中国"解析为"中国"。
查询语句2: select * from country where name like '中国';
经过"编译器解析"后,"中国"被解析为"中国",接着经过"正则表达式解析"后,"中国"解析为"中国"。
查询语句3: select * from country where name like '中\国';
经过"编译器解析"后,"中\国"被解析为"中国",接着经过"正则表达式解析"后,"中国"解析为"中国"。所以实际的模糊查询结果为"中国"。
查询语句4: select * from country where name like '中\国';
经过编译器解析后,"中\国"被解析成"中国",接着经过"正则表达式解析"后,"中国"解析为"中国"。所以实际的模糊查询结果为"中国"。
二. 应用
以Spring boot starter web为例,当controller层接收到含有一条反斜线的属性(或字符串)参数后,会像下图所示:
但实际上如果我们写测试用例模拟时,此处等价于
此处,我对该参数做了模糊查询,因此按照如下写法:
scheduleEventVO.setDescription(scheduleEventVO.getDescription().replaceAll("\", "\\"));
criteria.andLike("description", StringUtils.stringLike(scheduleEventVO.getDescription()));
相关知识
mysql int类型in条件用字符串查询不到
从select查询中将强制转换的值提取到数组中
Mysql重点知识
当向搜索字符串添加1个或2个字符时,为什么这个MySQL查询花费的时间会不成比例地长?
mysql从表中获取用户最高出价
【蓝蓝高频面试之数据库系列】第一期数据库基础20题
写了个数据查询为空的 Bug,你会怎么办?
MySQL优化笔记(三)
Java花卉销售与管理系统(开题+源码)
MySQL优化系列(三)
网址: Java查询Mysql数据库时,查询条件带有反斜线\的处理方式 https://www.huajiangbk.com/newsview105923.html
上一篇: 【李刚 |
下一篇: 花了1个月时间,把Python库 |
推荐分享

- 1君子兰什么品种最名贵 十大名 4012
- 2世界上最名贵的10种兰花图片 3364
- 3花圈挽联怎么写? 3286
- 4迷信说家里不能放假花 家里摆 1878
- 5香山红叶什么时候红 1493
- 6花的意思,花的解释,花的拼音 1210
- 7教师节送什么花最合适 1167
- 8勿忘我花图片 1103
- 9橄榄枝的象征意义 1093
- 10洛阳的市花 1039