【发布时间】:2018-06-22 05:30:20
【问题描述】:
我有一个包含三个字段的 MySQL 表:
fname varchar(20)
ftype varchar(10)
value varchar(30)
你可以看到“值”是一个 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 驱动程序中是否有任何选项告诉它不要抛出异常?
【问题讨论】:
-
您是否尝试重写查询以正确处理数据类型转换?
UPDATE table SET value = CAST(1 + CAST(value as CHAR(30)) as CHAR(30)) WHERE ftype='COUNTER'; -
该警告是在 sum 运算符完成的从 varchar 到 unsigned 的隐式转换过程中产生的,我看不出如何在隐式转换之前将 varchar 转换为 char 可以解决问题。
标签: java mysql exception jdbc truncated