MySQL特殊字符问题

假设数据库中有值AAA\nBBB
那么对应的like语句为:SELECT * FROM tableNamewherevalue like '%AAA\\\\nBBB%';
对应=语句为:SELECT * FROM tableNamewherevalue = 'AAA\\nBBB';

假设数据库中有值AAA%BBB
那么对应的like语句为:SELECT * FROM tableNamewherevalue like '%AAA\\%BBB%';
对应=语句为:SELECT * FROM tableNamewherevalue = 'AAA%BBB'; =语句不需要转义%

数据库中,\和%是特殊字符,存可以正常存,但查询时需要转义才能查到原来的值。

java中是这样:
like语句

            String v=Utils.toString(bo.getValue()).toLowerCase();
            v=v.replaceAll("\\\\","\\\\\\\\");//一个\替换成两个\
            v=v.replaceAll("%","\\\\%");//数据库%是特殊字符,直接搜索搜不出来,需要添加转义符
            lqw.like(StringUtils.isNotBlank(bo.getValue()), "LOWER(value)", v);

=语句

            String v=Utils.toString(bo.getValue()).toLowerCase();
            lqw.eq(StringUtils.isNotBlank(bo.getValue()), "LOWER(value)", v);

trim函数会转义中间的\n之类的特殊字符,但是它转义成什么我不清楚,反正使用trim函数后,不管加不加反斜杠,都查不出东西。
需要这样:

String v = i.getValue();
v=v.replaceAll("\\\\","\\\\\\\\");//一个\替换成两个\
lqw.apply("trim(`value`) = trim('"+v+"')");
where xxx AND (trim(value) = trim('AAA\nBBB')) --查本身是\n的,显示是换行的
where xxx AND (trim(value) = trim('AAA\\nBBB')) --查本身是\\n的,显示是\n的

还需要注意的是mysql客户端工具,不会显示单纯的\n,需要复制到诸如https://www.jq22.com/textDifference的工具上查看才能直到内容有没有\n

你可能感兴趣的:(数据库,mysql)