今天发现公司产品在模糊搜索时 搜索“_”会返回所有数据
然后拿到数据库去执行时确实发现会查出所有数据
数据模糊查询逻辑如下:
SELECT * FROM `work_time` WHERE `name` LIKE "%?%"
使用的是包含语句 ?为传入的值
_在SQL里面是通配符 代表一个字符
% 在SQL里面是通配符 代表任意长度字符
当我们输入
SELECT * FROM `work_time` WHERE `name` LIKE "%_%"
代表那么包含一个长度(>=1个长度)的所有数据
SELECT * FROM `work_time` WHERE `name` LIKE "%%%
代表那么包含任意长度的所有数据
因此需要转义 加 \ 可查出包含% 和_的数据
SELECT * FROM `work_time` WHERE `name` LIKE "%\_%
SELECT * FROM `work_time` WHERE `name` LIKE "%\%%
实际应用搜索车牌号为7位的车辆(川A88888)存在异常车牌号就不是7位
select car_num from car where car_num like "_______"
like后面直接加7根下划线就可以了