一、背景
模糊查询字段输入一个%,查出了所有数据
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;
}
}