我有下面的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'的默认值无效

这里的误差是多少?


当前回答

禁用严格SQL模式

Create disable_strict_mode.cnf file at /etc/mysql/conf.d/

在文件中,输入这两行:

[mysqld]
sql_mode=IGNORE_SPACE,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

最后,用下面的命令重新启动MySQL:

sudo service mysql restart

其他回答

禁用严格SQL模式

Create disable_strict_mode.cnf file at /etc/mysql/conf.d/

在文件中,输入这两行:

[mysqld]
sql_mode=IGNORE_SPACE,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

最后,用下面的命令重新启动MySQL:

sudo service mysql restart

我在OS X上通过从Homebrew安装MySQL解决了这个问题

brew install mysql

通过在/usr/local/etc/my.cnf中添加以下内容

sql_mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

重新启动MySQL

brew tap homebrew/services
brew services restart mysql

为了避免这个问题,你需要从mysql模式配置中删除NO_ZERO_DATE。

进入“phpmyadmin”。 加载phpmyadmin后,单击“变量”选项卡。 搜索“sql mode”。 单击Edit选项并从配置中删除NO_ZERO_DATE(及其后面的逗号)。

在使用wamp或xamp的本地环境中,这是一个非常常见的问题。

时间戳的范围是'1970-01-01 00:00:01' UTC到'2038-01-19 03:14:07' UTC(见文档)。默认值必须在该范围内。

其他奇怪的相关行为:

CREATE TABLE tbl1 (
    ts TIMESTAMP);  
Query OK, 0 rows affected (0.01 sec)

CREATE TABLE tbl2 (
    ts TIMESTAMP,
    ts2 TIMESTAMP);
ERROR 1067 (42000): Invalid default value for 'ts2'

CREATE TABLE tbl3 (
    ts TIMESTAMP,
    ts2 TIMESTAMP DEFAULT '1970-01-01 00:00:01');
Query OK, 0 rows affected (0.01 sec)

旁注,如果你想插入null:

CREATE TABLE tbl4 (
    ts TIMESTAMP NULL DEFAULT NULL);
ALTER TABLE `wp_actionscheduler_actions` CHANGE `scheduled_date_gmt` `scheduled_date_gmt` DATETIME NULL DEFAULT CURRENT_TIMESTAMP, CHANGE `scheduled_date_local` `scheduled_date_local` DATETIME NULL DEFAULT CURRENT_TIMESTAMP, CHANGE `last_attempt_gmt` `last_attempt_gmt` DATETIME NULL DEFAULT CURRENT_TIMESTAMP, CHANGE `last_attempt_local` `last_attempt_local` DATETIME NULL DEFAULT CURRENT_TIMESTAMP;