一、背景
模糊查询字段输入一个%,查出了所有数据
SELECT * FROM region_info WHERE region LIKE '%%%';
目标结果应该返回region属性包含%的结果集:
然而(部分结果集):
二、原因
MySQL有一些特殊字符需要进行转义,模糊查询中%、_是属于匹配规则特殊字符,单引号'和转义字符\也需要处理
三、解决办法
需要查询内容进行转义,如:
SELECT * FROM region_info WHERE region LIKE '%\%%';
正确结果集:
代码中查询,处理查询内容工具类:
public class MySQLUtil {/*** sql特殊字符转义** @param content 转义内容* @return 转义后内容*/public static String escape(String content) {if (content != null && !content.trim().isEmpty()) {content = content.replaceAll("\\\\", "\\\\\\\\");content = content.replaceAll("_", "\\\\_");content = content.replaceAll("%", "\\\\%");content = content.replaceAll("'", "\\\\'");}return content;}}