【问题标题】:JDBC treat warnings as error on data truncationJDBC 将警告视为数据截断错误
【发布时间】: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


【解决方案1】:

您的问题的答案在这里:https://bugs.mysql.com/bug.php?id=24546

基本上,添加“jdbcCompliantTruncation=false”作为 URL 配置参数

【讨论】:

    猜你喜欢
    • 2011-01-05
    • 1970-01-01
    • 2012-01-13
    • 2022-08-03
    • 1970-01-01
    • 2010-11-05
    • 2013-07-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多