MySQL特殊字符问题

文章讲述了在数据库查询中如何处理和转义特殊字符,如 和%.LIKE语句需要对 和%进行转义,而=操作则不需要转义%.trim函数可能改变特殊字符形式,导致查询失败,需额外处理。在Java中进行这些操作时,需替换 为\n,%为\%.MySQL客户端可能无法直接显示 ,需借助外部工具检查内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

假设数据库中有值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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值