【问题标题】:MySQL error: Could not execute MySQL-statement: Incorrect datetime value?MySQL 错误:无法执行 MySQL 语句:日期时间值不正确?
【发布时间】:2017-03-21 08:49:51
【问题描述】:

在我的一张表中,有多个TIMESTAMP 类型的列。我必须在这些列中插入未来的TIMESTAMP。执行查询时发生以下错误。

MySQL error: Could not execute MySQL-statement: Incorrect datetime value: '2060-12-22 10:35:13' for column 'goal_end_time'. 

在mysqlThe DATE, DATETIME, and TIMESTAMP Types的官方文档中提到它最多只能存储2038-01-19 03:14:07

我不能使用DATE 类型,因为我也需要时间和DATE

【问题讨论】:

  • 我不确定我是否理解正确,但你不能只使用 DATETIME 吗? - 根据它说的文档 - “DATETIME 类型用于包含日期和时间部分的值。MySQL 以 'YYYY-MM-DD HH:MM:SS' 格式检索和显示 DATETIME 值。支持的范围是' 1000-01-01 00:00:00' 到 '9999-12-31 23:59:59'"。那么这还不够吗?

标签: mysql datetime timestamp


【解决方案1】:

您是否有必要在您的桌子上输入值2060-12-22 10:35:13 或者任何未来的日期都可以?官方文档上的支持只到2038-01-19 03:14:07。我想它会抛出错误,因为在您使用的时间戳中,2060 已经超过了系统的限制 2038。如果您只需要设置一个未来的日期,您可能需要考虑 2038 年之前的某些内容,例如 2037-12-22 10:35:13 而不是 2060-12-22 10:35:13

【讨论】:

    【解决方案2】:

    如果表为空或不是很大,我的建议是将创建语句导出为 .sql 文件,然后根据需要重写它们。如果您有任何现有数据,也可以这样做,即导出插入语句(我建议在单独的文件中作为创建语句执行此操作)。最后,删除表并执行第一个创建语句然后插入。

    您可以使用 MySQL 安装中包含的 mysqldump 命令,也可以安装 MySQL Workbench,这是一个免费的图形工具,它还以非常可定制的方式包含此选项,而无需查找特定的命令选项。

    【讨论】:

      【解决方案3】:

      正如用户rocky 在此问题的评论部分中指出的,将我的列名从TIMESTAMP 更改为DATETIME 对我有用。

      DATETIME 类型用于同时包含日期和时间部分的值。 MySQL 以 'YYYY-MM-DD HH:MM:SS' 格式检索和显示 DATETIME 值。支持的范围是“1000-01-01 00:00:00”到“9999-12-31 23:59:59”。

      【讨论】:

        【解决方案4】:

        非常简单...在mysqld.conf (/etc/mysql/mysql.conf.d/mysqld.cnf) 中找到SQLMODE=.... 行并删除NO_ZERO_DATE 和NO_ZERO_IN_DATE。导入您的 sql 文件。并还原您的更改。别忘了重启mysql (/etc/init.d/mysql restart OR service mysql restart)

        如果找不到此行,请添加:

        sql_mode = STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-06-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-06-28
          • 2021-11-11
          • 1970-01-01
          相关资源
          最近更新 更多