我有下面的sql创建语句

mysql> CREATE  TABLE IF NOT EXISTS `erp`.`je_menus` (
    ->   `id` INT(11) NOT NULL AUTO_INCREMENT ,
    ->   `name` VARCHAR(100) NOT NULL ,
    ->   `description` VARCHAR(255) NOT NULL ,
    ->   `live_start_date` DATETIME NULL DEFAULT NULL ,
    ->   `live_end_date` DATETIME NULL DEFAULT NULL , 
    ->   `notes` VARCHAR(255) NULL ,
    ->   `create_date` TIMESTAMP NOT NULL DEFAULT  '0000-00-00 00:00:00',
    ->   `created_by` INT(11) NOT NULL ,
    ->   `update_date` TIMESTAMP NOT NULL DEFAULT  CURRENT_TIMESTAMP  ,
    ->   `updated_by` INT(11) NOT NULL , 
    ->   `status` VARCHAR(45) NOT NULL ,
    ->   PRIMARY KEY (`id`) ) 
    -> ENGINE = InnoDB;

给出以下错误

错误1067 (42000):'create_date'的默认值无效

这里的误差是多少?


当前回答

如果从MySQL工作台生成脚本。

生成以下一行

SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';

从SQL_MODE中删除TRADITIONAL,然后脚本就可以正常工作了

否则,您可以将SQL_MODE设置为允许无效日期

SET SQL_MODE='ALLOW_INVALID_DATES';

其他回答

只需在数据库SQL文件的顶部定义以下行。

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";

这对我很有用。

在ubuntu desktop 16.04中,我这样做了:

在您选择的编辑器中打开文件:/etc/mysql/mysql.conf.d/mysqld.cnf。 寻找:sql_mode,它将在[mysqld]下的某个地方。 并将sql_mode设置为如下值: NO_ZERO_IN_DATE、ERROR_FOR_DIVISION_BY_ZERO NO_AUTO_CREATE_USER NO_ENGINE_SUBSTITUTION 保存并重新启动mysql服务: Sudo服务mysql重启

改变:

`create_date` TIMESTAMP NOT NULL DEFAULT  '0000-00-00 00:00:00',
`update_date` TIMESTAMP NOT NULL DEFAULT  CURRENT_TIMESTAMP  ,

致以下:

`create_date` TIMESTAMP NOT NULL DEFAULT  CURRENT_TIMESTAMP ,
`update_date` TIMESTAMP NOT NULL DEFAULT  CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ,

我有类似的问题与MySQL 5.7与以下代码:

' update_date ' TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP

我用这个来代替:

' update_date ' TIMESTAMP NOT NULL默认的当前时间戳

你可以修改这个:

`create_date` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00',

就像这样:

`create_date` TIMESTAMP NOT NULL DEFAULT '2018-04-01 12:00:00',