首页 > 其他 > 详细

like 内容转义

时间:2019-02-22 21:33:41      阅读:167      评论:0      收藏:0      [点我收藏+]

如题,当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后边的字符串除了会在语法解析时转义一次外,还会在正则匹配时进行第二次的转义。因此如果期望最终匹配到"\",就要反转义两次,也即由"\"到"\\"再到"\\\\"。

 

 


---------------------
作者:black-heart
来源:CSDN
原文:https://blog.csdn.net/mrqingyu/article/details/81004580
版权声明:本文为博主原创文章,转载请附上博文链接!

like 内容转义

原文:https://www.cnblogs.com/hehexu/p/10420576.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!