当我尝试使用java.sql.Timestamp值插入MySQL 5.6中的DATETIME列时,我总是收到此错误:
com.mysql.jdbc.MysqlDataTruncation:数据截断:日期时间值不正确:''对于第1行的'invoice_date'列
此项目的原始开发人员具有创建Prepared语句的自定义JAR,以便将java.util.Date转换为插入DATETIME的Timestamp,反之亦然,以及处理数据库连接。请注意,这是我的假设,因为没有关于它的文档。尝试使用时间戳通过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的服务器上,这可以正常工作。我假设Timestamp中的毫秒值导致问题转换为DATETIME?由于原版工作在旧版本。有没有办法解决这个问题而无需用5.0重新安装所有内容?
答案 0 :(得分:1)
如果问题是毫秒,请明确指定日期格式的时间戳。如果用例在MySQL 5.0上成功并且您在5.0和5.6上部署了不同的jdbc驱动程序,则值得在MySQL 5.6上测试该驱动程序。最后,您没有在setter中传递索引,并且不正确的datetime值是空字符串。您是否在调试器/日志中验证过您没有尝试插入空字符串?