我在使用MySQL通过JDBC更新行时遇到以下异常:
com.mysql.jdbc.MysqlDataTruncation:数据截断:日期时间值不正确:'2006-10-01 02:22:44'
该列定义为:
'
created_on_service
时间戳NULL DEFAULT NULL'
该列上没有索引或外键。
显然,这不是数据类型的问题。我在该日期时间之前和之后都有该表中的值。我也有在上午2:22之前和之后的时间值。
答案 0 :(得分:17)
解决了它。
事实证明,2006年10月1日在南澳大利亚是夏令时的开始。时钟在凌晨2点开始向前设置一小时,所以当天凌晨2点22分没有:它从凌晨2点直到凌晨3点01分。
我会将db时区更改为UTC,这应解决此问题。
答案 1 :(得分:4)
我通过升级MySQL连接器JAR并将mysql.jar复制到Tomcat lib目录来解决同样的问题(com.mysql.jdbc.MysqlDataTruncation: Data truncation: Incorrect datetime value: '' for column 'perev_start_time' at row 1
)。
MySQL Server的版本是5.6,MySQL连接器是mysql-connector-java-5.1.30-bin.jar
。
答案 2 :(得分:2)
我们升级了MySQL服务器,但没有升级mysql连接器jar。我们遇到了这个问题。后来我发现这是因为旧罐子。我升级了它,这个问题就消失了。
答案 3 :(得分:0)
您没有显示确切的更新SQL。但可能你忘了日期部分
正确的格式是yyyy-mm-dd hh:mm:ss格式
日期值应采用以下格式2011-11-01 12:32:01
答案 4 :(得分:0)
我的问题也是由DST引起的。我已将列数据类型从timestamp
更改为datetime
,从而解决了这个问题。这个answer描述了差异,简而言之:
INSERT
/ UPDATE
和不同的SELECT
结果有不同的解释。由于夏令时,某些时间点无效; 注意:您可能仍需要处理"缺失"时间。这种方法只是将责任从数据库级别转移到应用程序级别。
另请参阅:TIMESTAMP与DATETIME的MySQL documentation