MySQL执行insert反斜杠消失问题
金蝶云社区-雪獒
雪獒
0人赞赏了该文章 1,052次浏览 未经作者许可,禁止转载编辑于2017年09月02日 16:32:09

最近在MySQL中执行sql时发现执行完sql之后在数据库中插入的记录中把 \ 符号弄丢了,具体如下:
我的数据大概是这样的:{"expression":"${model.company.number != \"technology\"}"},
sql为: insert into xxx(fdesc) values('{"expression":"${model.company.number != \"technology\"}"}');
执行完之后,数据库中插入的为:


technology前后的引号前的转义反斜杠没有了。

上网查了下,MySQL确实有“吃掉”反斜杠的问题。由于我的json数据是java中生成的,所以在生成的时候需要将 \ 替换成 \\,这样最终插入在数据库中时会有一个 \,代码如下:
expression.replaceAll("\\\"", "\\\\\"")


另外,由于json中的数据会有: {"zh_CN":" 公司编码不等于 'techonogy' 时执行"} 这种有单引号的情况,此时还需要在单引号前也加 \ , 否则json中的单引号会和 insert into xxx(fdesc) vlaues(' xxx ') 中的单引号匹配,导致执行sql时报错。