我有一个包含三个字段的MySQL表:
fname varchar(20)
ftype varchar(10)
value varchar(30)
你可以看到“value”是一个varchar,但我用它来存储不同类型的值(由用户输入),所以我可以这样做:
UPDATE table SET value = 1 + value WHERE ftype='COUNTER';
它按预期工作,进行隐式转换,然后更新和存储,所以:
fname ftype value
f1 COUNTER 100
f2 COUNTER 100 dǵ#$vferv <-- this value contains an input error
成为:
fname ftype value
f1 COUNTER 101
f2 COUNTER 101
我很满意。
重点是,如果我直接执行查询,它会起作用(如果我运行show warnings
,最终MySQL会返回一些警告),但如果我在Java EE应用程序内运行(在glassfish下运行),那么这些警告就会被视为错误,所以我会得到一个例外(即:com.mysql.jdbc.MysqlDataTruncation: Data truncation: Truncated incorrect DOUBLE value: '100 dǵ#$vferv'
)。
JDBC驱动程序中是否有任何选项告诉它在这种情况下不抛出异常?
答案 0 :(得分:1)
您的问题的答案在这里:https://bugs.mysql.com/bug.php?id=24546
基本上,添加“ jdbcCompliantTruncation = false”作为URL配置参数