【问题标题】:TIMESTAMP default value errorTIMESTAMP 默认值错误
【发布时间】:2015-05-02 01:32:48
【问题描述】:

我将带有工作台的 SQL 脚本导出到 phpMyAdmin,但由于 TIMESTAMP 默认值而出现错误。

这是一段代码:

CREATE TABLE IF NOT EXISTS `test`.`is_users` (
  `count` INT(10) UNIQUE NOT NULL AUTO_INCREMENT,
  `active` ENUM('1', '0') NULL DEFAULT 1,
  `id` VARCHAR(36) UNIQUE NOT NULL,
  `created_at` TIMESTAMP NOT NULL DEFAULT '1970-01-01 00:00:01',
  `updated_at` TIMESTAMP NOT NULL DEFAULT '1970-01-01 00:00:01',
  `deleted_at` TIMESTAMP NULL DEFAULT NULL,

我得到一个错误:

#1067 - 'created_at' 的默认值无效

为避免错误,默认日期应为例如 1970-01-01 01:01:01,这意味着不能有零。 我怎么能解决这个问题? 谢谢。

【问题讨论】:

    标签: mysql database phpmyadmin mysql-workbench mysql-error-1067


    【解决方案1】:

    试试

    SELECT FROM_UNIXTIME(1);
    

    如果您的系统在 UTC 以外的另一个时区运行,那么您将不会得到“1970-01-01 00:00:01”的结果。例如,我的系统在 CET 中运行,结果为“1970-01-01 01:00:01”。所以这个结果应该作为你的表的默认值。

    【讨论】:

      【解决方案2】:

      00:00:01 有效一段时间。

      TIMESTAMP DEFAULT 处理在 5.6.5 发生了变化。你用的是什么版本?见http://dev.mysql.com/doc/refman/5.6/en/timestamp-initialization.html

      我在 5.6.12 中没有收到错误。

      解决方案:升级到 5.6。

      【讨论】:

        【解决方案3】:

        在 5.7 上,您希望禁用 sql_mode 中的 TRADITIONAL 以便能够在日期时间和时间戳中支持 '0000-00-00 00:00:00',或者根据需要在时间上支持 0。 例如,默认情况下,在 5.7.10 上,SQL MODES 是:

        mysql> SELECT @@sql_mode;
        +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
        | @@sql_mode                                                                                                                                                               |
        +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
        | STRICT_TRANS_TABLES,STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ALLOW_INVALID_DATES,ERROR_FOR_DIVISION_BY_ZERO,TRADITIONAL,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
        +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
        1 row in set (0.00 sec)
        

        您可以通过在您的 my.cf 文件中设置 sql_mode 或使用以下命令来执行此操作:

        SET sql_mode='ALLOW_INVALID_DATES';
        

        您可能希望保持一些其他模式,并且您应该查看上面链接的文档。这非常棘手,因为某些模式依赖于其他模式。

        【讨论】:

          【解决方案4】:

          其实删除这部分代码就够了:

           SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
           SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
           SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';`
          

          【讨论】:

            猜你喜欢
            • 2014-07-03
            • 2020-12-01
            • 2013-02-16
            • 1970-01-01
            • 2013-12-24
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-05-02
            相关资源
            最近更新 更多