MySQL之like语句中特殊字符含义以及对应转义工具类

在like语句查询中,有一些特殊字符需要注意,否则会出现查询结果不符的问题:
1、 ':用于包裹搜索条件,需转为\'
2、 %:用于代替任意数目的任意字符,需转换为\%
3、 _:用于代替一个任意字符,需转换为\_
4、 \:转义符号,需转换为\\

对应转义工具类:

/**
 * 转义工具
 */
public class EscapeUtil {

    /**
     * like转义
     *
     * @param str
     * @return
     */
    public static String likeEscape(String str) {
        if (str != null && !"".equals(str)) {
            return str.replaceAll("[('%_\\\\)]", "\\\\$0");
        }
        return str;
    }

    public static void main(String[] args) {
        String str = "abc'%_\\d";
        System.out.println("转义前:" + str);
        System.out.println("转义后:" + EscapeUtil.likeEscape(str));
        System.out.println("无转义:" + EscapeUtil.likeEscape("abcd"));
    }

}

测试结果:

转义前:abc'%_\d
转义后:abc\'\%\_\\d
无转义:abcd

说明:
转义部分代码我直接使用正则进行替换,因为本身\是java和正则的转义符,所以在正则中一个\需要使用4个\代替。

参考资料:
https://www.awaimai.com/1365.html


觉得内容还不错?打赏个钢镚鼓励鼓励!!👍