在项目中有用格式化数据(json,xml)来存储规则配置,存储数据库为mysql。且规则项目中有复制功能(导出sql到文件,上传sql文件写到数据库);出现配置好的数据复制后json解析失败。
origin db:
[{"name":"nA","id":"idA","evals":"[{\"name\":\"xa\",\"type\":\"tA\",\"operation\":\"idAdd\",\"domainArea\":[\\\"20181010\\\",\\\"20201010\\\"]}]"]
复制后:
[{"name":"nA","id":"idA","evals":"[{"name":"xa","type":"tA","operation":"idAdd","domainArea":[\"20181010\",\"20201010\"]}]"]
复制后数据查出后Json转换失败。
经测试:
1、jvm 导出到.sql文件,转义字符未变。
2、.sql文件加载到 jvm,转义字符未变。
3、mysql:
3.1使用jdbc mybatis prepareStatement setString,插入的数据转义字符未变。应是prepareStatement 在setString 对字符串加了转义。
3.2 使用jdbc statement.execute(sql),插入的数据转义字符减少。
CREATE TABLE TEST_STR(
ID INT(10) NOT NULL AUTO_INCREMENT,
STR VARCHAR(32) DEFAULT NULL,
PRIMARY KEY (ID)
) engine=Innodb DEFAULT CHARSET=UTF-8;
insert into test_str(str)values('\"');
insert into test_str(str)values('\\"');
insert into test_str(str)values('\\\"'); --\"
insert into test_str(str)values('\\\\"');
insert into test_str(str)values('\\\\\"'); -- \\"
insert into test_str(str)values('\\\\\\"');
insert into test_str(str)values('\\\\\\\"'); -- \\\"
select *