当我尝试使用 java.sql.Timestamp 值插入 MySQL 5.6 中的 DATETIME 列时,我总是会收到此错误:
com.mysql.jdbc.MysqlDataTruncation: Data truncation: Incorrect datetime value: '' for column 'invoice_date' at row 1
该项目的原始开发人员拥有创建准备语句的自定义 JAR,例如将 java.util.Date 转换为要插入到 DATETIME 中的时间戳,反之亦然,以及处理数据库连接。请注意,这是我的假设,因为没有关于它的文档。尝试使用时间戳通过 PreparedStatement 自己插入 DATETIME 得到了相同的结果,使用类似的东西:
ps.setTimestamp(3, new Timestamp(date.getTime()));
我必须创建自己的连接才能使用 java.sql.Date 来解决这个问题。但是,它会将时间值归零。我用过
ps.setDate(3, new java.sql.Date(date.getTime()));
我得到类似的东西
2013-06-27 00:00:00
在表中,因为我们知道 java.sql.Date 不存储时间。
令人惊讶的是,在使用 MySQL 5.0 的服务器上,这可以正常工作。我假设时间戳中的毫秒值导致转换为 DATETIME 的问题?由于原始版本适用于旧版本。有什么方法可以解决这个问题而不必使用 5.0 重新安装所有内容吗?
最佳答案
如果问题是毫秒,请显式设置时间戳的日期格式。如果用例在 MySQL 5.0 上成功并且您在 5.0 和 5.6 上部署了不同的 jdbc 驱动程序,则值得在 MySQL 5.6 上测试该驱动程序。最后,您没有在 setter 中传递索引,并且不正确的日期时间值是空字符串。您是否在调试器/日志中验证过您没有尝试插入空字符串?
关于插入 DATETIME 时出现 java.sql.Timestamp 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17333903/