【问题标题】:Incorrect datetime value: '0000-00-00 00:00:00' for column日期时间值不正确:列的“0000-00-00 00:00:00”
【发布时间】:2019-07-15 18:23:45
【问题描述】:

我有一个包含 2M 记录的表,直到几个小时前一切正常。 突然,它在以前可以正常工作超过 1 年的查询上抛出错误。 问题是在 timestamp 列中插入正确的 dateTime(如 2019-07-15 22:22:47)会返回错误:

不正确的日期时间值:第 1 行的列“created_at”的“0000-00-00 00:00:00”

1- 我做了重复的表结构和查询在重复的表上工作正常
2- 我今天确实运行了yum update
3- 操作系统:CentOS 6.10 版(最终版)
4- MySql:服务器版本:8.0.16 MySQL 社区服务器 - GPL

编辑: 我已经阅读了其他问题,但它完全不同,我已经发布了答案

【问题讨论】:

  • 您的表中很少有旧记录的日期时间值不正确0000-00-00 00:00:00。你需要修复这些。如果您不知道它们的正确值;您可以将它们设置为null。做:SET sql_mode = ''; UPDATE your_table_name SET created_at = null WHERE created_at = '0000-00-00 00:00:00';
  • @MadhurBhaiya 不,没有任何记录'0000-00-00 00:00:00'
  • 你提到的问题是完全不同的情况,我正在插入一个包含有效数据的新行

标签: mysql datetime


【解决方案1】:

我找到了,发布为可能对其他人有帮助的答案

似乎最新的 mysql 更新添加了一些新角色来比较日期时间值,但我认为抛出的错误完全无关紧要。 我的表上有一个触发器,它检查一些参数并检查 created_at 列是否等于'0000-00-00 00:00:00',然后将其更改为 current_timestamp。触发器的一部分是

IF(NEW.created_at = '0000-00-00 00:00:00') THEN
    SET NEW.created_at = current_timestamp();
END IF  

它只是一个简单的比较,结果应该是真或假,不应该抛出零日期异常
但是我删除了这部分,现在一切正常

【讨论】:

    【解决方案2】:
    1. 编辑 /etc/my.cnf 并添加行

    sql-mode = ""

    保存此文件

    1. 重启 MySQL 服务

    systemctl 重启 mysqld

    1. 试试你的sql命令,

    示例:

    UPDATE TABLE 测试集已修改 ='0000-00-00 00:00:00'

    【讨论】:

      猜你喜欢
      • 2016-06-04
      • 1970-01-01
      • 1970-01-01
      • 2013-07-12
      • 2018-06-02
      • 2014-02-19
      • 1970-01-01
      • 2017-09-21
      • 2011-06-27
      相关资源
      最近更新 更多