Druid版本:1.1.4
例子1:
String sql = "insert into test values('a\\\"','b\\n')";
sql = SQLUtils.format(sql, JdbcConstants.MYSQL,new SQLUtils.FormatOption(VisitorFeature.OutputUseInsertValueClauseOriginalString));
System.err.println(sql);
希望得到的输出: insert into test values('a\"','b\n')
实际的输出:
insert into test values ('a"', 'b
')
例子2:
String sql = "insert into test values(?,?)";
List<Object> list = new ArrayList<>();
list.add("a\\\"");
list.add("b\\n");
sql = SQLUtils.format(sql, JdbcConstants.MYSQL,list);
System.err.println(sql);
希望得到的输出: insert into test values('a\\\"','b\\n')
实际的输出:
INSERT INTO test
VALUES ('a\\"', 'b\\n')
以上两个例子中 格式化之后的第一个参数应该都少了一个反斜杠
4条答案
按热度按时间q8l4jmvw1#
@wenshao 哪位大佬能看下
j2datikz2#
1.1.20的版本也有这个问题。。
gojuced73#
首先
在JAVA String中会先转义一次 实际上在
lexer
的text
中是而
\"
在dbType为MySQL的时候会被转义 为"
个人愚见
yvfmudvl4#
首先
在JAVA String中会先转义一次 实际上在
lexer
的text
中是而
\"
在dbType为MySQL的时候会被转义 为"
个人愚见
嗯 你说得很有道理。。但是这还是一个问题
如果上述的sql我是作为参数入库的话
参数为
insert into test values('a\"','b\n')
时在不用druid做任何处理的情况下我能将他完整的插入数据库
但是经过druid处理之后就变成了
当我这个参数为json的情况下甚至会抛出MysqlDataTruncation: Data truncation: Invalid JSON text