原创

mysql中遇到转义字符怎么处理

1、背景

  • 标中有个大json的字段,需求是更新字段中的某一个属性。
  • 实际效果是每次更新完毕后,再次读取解析,提示数据格式不正确

2、思考

明明是把数据读取出来,然后把其中一个属性的内容replace掉,从逻辑和生成的sql看 都是没有问题。但是实际测试就是不正确。

update user set status=1,extend_field='{"PAAS":"{\"adminFlowHidden\":false,\"bigFileSignFlow\":false,\"extend\":{\"createIp\":\"10.120.26.24\"}}"}' where userId='0eeb5a3f5d96444b89970aa035d6cc4e'

dba告诉我正确的sql是

update user set status=1,extend_field='{"PAAS":"{\\"adminFlowHidden\\":false,\\"bigFileSignFlow\\":false,\\"extend\\":{\\"createIp\\":\\"10.120.26.24\\"}}"}' where userId='0eeb5a3f5d96444b89970aa035d6cc4e'

也就是\需要被替换为\,原因是mysql的转义造成的。

3、总结

System.out.println(String.format(updateSql1, extendField.replace("\\","\\\\"), "cd1e7bc699f049df9f369a5469a41868"));
  • replace和replaceAll都是替换全部的字符串,replace是基于字符串的,而replaceAll是基于正则表达式的
  • 遇到斜杠转义的时候,达不到效果可以增加双倍的\来测试一下
正文到此结束
本文目录