MySQL:数据截断:日期时间值不正确:“2006-10-01 02:22:44”

MySQL:数据截断:日期时间值不正确:“2006-10-01 02:22:44”,mysql,jdbc,Mysql,Jdbc,我通过JDBC使用MySQL更新一行时遇到以下异常: com.mysql.jdbc.MysqlDataTruncation:数据截断:日期时间值不正确:“2006-10-01 02:22:44” 该列定义为: '在\u服务时间戳NULL上创建\u默认为NULL' 该列上没有索引或外键 显然,这不是数据类型的问题。表中有日期时间前后的值。我还有凌晨2:22前后的时间值。您没有显示确切的更新SQL。但也许你忘记了约会的部分 正确的格式是yyyy-mm-dd hh:mm:ss格式 日期值的格式应为20

我通过JDBC使用MySQL更新一行时遇到以下异常:

com.mysql.jdbc.MysqlDataTruncation:数据截断:日期时间值不正确:“2006-10-01 02:22:44”

该列定义为:

'在\u服务时间戳NULL上创建\u默认为NULL'

该列上没有索引或外键


显然,这不是数据类型的问题。表中有日期时间前后的值。我还有凌晨2:22前后的时间值。

您没有显示确切的更新SQL。但也许你忘记了约会的部分

正确的格式是yyyy-mm-dd hh:mm:ss格式

日期值的格式应为2011-11-01 12:32:01

事实证明,2006年10月1日在南澳大利亚是夏令时的开始。时钟在凌晨2点前拨一小时,所以那天没有凌晨2点22分:从凌晨2点一直拨到凌晨3点01分


我将db时区更改为UTC,这将解决此问题。

我们升级了MySQL服务器,但没有升级MySQL连接器jar。我们遇到了这个问题。后来我发现是因为那个旧罐子。我升级了它,这个问题就消失了。

我通过升级我的mysql连接器JAR,并将mysql.JAR复制到Tomcat lib目录,修复了com.mysql.jdbc.MysqlDataTruncation:Data truncation:datetime值不正确:对于第1行的“perev_start_time”列


MySQL服务器的版本是5.6,MySQL连接器是MySQL-connector-java-5.1.30-bin.jar。

我的问题也是由DST引起的。我通过将列数据类型从timestamp更改为datetime来修复它。简而言之,这描述了区别:

时间戳将时间存储为,因此根据服务器的时区将其转换为UTC或从UTC转换为UTC。更改服务器时区后,对插入/更新和选择结果有不同的解释。由于DST,某些时间点无效; datetime按原样存储时间,与服务器时区无关。超过UTC时间时,任何时间都有效,没有DST孔。 注意:您可能仍然需要处理丢失的时间。这种方法只是将责任从数据库级别转移到应用程序级别


另请参见:对于TIMESTAMP vs DATETIME

这可能有助于链接是关于文本数据的,特别是多字节字符集。这不适用。在发布之前,我确实在StackOverflow中搜索过类似的问题,但恐怕没有运气。我使用的是JDBC,所以确切的SQL不清楚,但是从我收到的错误消息来看,该值已经是YY-mm-dd hh:mm:ss格式。对于Java,使用24小时时钟的实际格式应该是:yyyy-mm-dd hh:mm:ss欢迎使用stack overflow。一般来说,后续问题不应作为答案发布,而应作为答案发布。但是,请随意链接回这个问题。如果改变db时区不可行,这看起来不像是一个新问题,我们还有什么其他选择。尽管如此,你指出这个问题确实避免了很多大脑疲劳。