更改表失败,因为行有不正确的数据 - 日期时间值不正确:'0000-00-00 00:00:00'

时间:2015-06-01 10:59:41

标签: mysql datetime

我正在使用以下语句更新当前用户表:

`ALTER TABLE  `users` ADD  `title` VARCHAR( 5 ) NULL DEFAULT NULL AFTER  `surname` ;`

返回以下错误:

#1292 - Incorrect datetime value: '0000-00-00 00:00:00' for column 'created_at' at row 1

Created_at列结构是:

created_at datetime NOT NULL

不确定数据为何无效 - 是否与MySQL版本(从5.5.43到5.1.73)有关?

我目前的修复是在ALTER TABLE语句之前更新datetime值:

UPDATE `users` SET `created_at`='2014-01-01 00:00:00' WHERE `created_at`='0000-00-00 00:00:00';

这是一个合理的解决方法吗?

3 个答案:

答案 0 :(得分:3)

MySQL's docs

  

服务器要求月和日值有效,而不仅仅是   分别在1到12和1到31之间。

此外:

  

启用严格模式后,无效日期会生成错误。以准许   这样的日期,启用ALLOW_INVALID_DATES。

所以Michael - sqlbot问你正确的问题。

答案 1 :(得分:2)

  

Created_at列结构是:   created_at datetime NOT NULL

似乎'0000-00-00 00:00:00'在您的新MySQL版本中被视为NULL但不是旧版本,并且您已指定数据库不应接受NULL值(“ NOT NULL“)。

答案 2 :(得分:0)

你应该禁用STRICT_TRANS_TABLES模式

SET sql_mode = '';

或 转到/etc/mysql/my.cnf&评论STRICT_TRANS_TABLES

实用说明 SQL STRICT MODE