由于昨晚时间管理的关系,早上又被无情的闹钟叫了起来,身体无比的困倦,于是想着早上划划水算了。正当吃着早餐刷着手机的时候,测试突然提了个bug过来,参数过滤功能没有起作用!!!
放下手机后看了一下bug,发现过滤的条件是"aaa_",想起我们的过滤就是简单的模糊查询,也就是 %输入的字符串% 。然后这里输入了aaa_,那么后台查询是条件是 %aaa_% ,因为下划线是通配符,所以过滤条件就跟**%aaa%**是一样的了。原因找到了,通配符!!
我们都知道,sql中的like语法是模糊查询,而模糊查询中又有通配符,作用就是匹配符合条件的数据。常见有如下通配符
通配符 | 作用 |
---|---|
% | 匹配任意数量的字符 |
_ | 表示一个字符,如果是中文的话匹配一个汉字 |
[^a-d] | 表示不在字符集中 |
[a-d] | 表示在字符集的范围 |
其中mysql支持%和_。
这个时候我们想要忽略 % 或者 _ 的作用的话,就要用到关键字 Escape 了
我们在like的条件中,下划线 _ 前面加上 \ ,比如 “aaa\_”,然后后面加上escape “”
也就是这样
select * from tbl where col like “%aaa\_%” escape "\"
这样就会匹配aaa_XXX了。
Escape 关键字和"\"配合使用就是将通配符转义的意思,即 \ 后面的字符当成普通字符对待,注意!只是后面的一个字符!!