我有下面的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'的默认值无效
这里的误差是多少?
使用OS X,从Homebrew安装mysql,系统变量基于它的默认编译。
解决方法是将“NO_ZERO_DATE”从系统变量“sql_mode”中删除。
请记住,范围涉及。
如果你只想影响你的会话,请使用“@@session”,例如:
SET @@session.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".
在这种情况下,一旦会话结束或更改它,它将不受影响。对其他会话没有影响。
如果你想影响所有客户端,请使用“@@global”,例如:
SET @@global.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".
在这种情况下,它只影响更改后连接的客户端(不影响当前所有客户端),一旦服务器退出,它将不起作用。
禁用严格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,系统变量基于它的默认编译。
解决方法是将“NO_ZERO_DATE”从系统变量“sql_mode”中删除。
请记住,范围涉及。
如果你只想影响你的会话,请使用“@@session”,例如:
SET @@session.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".
在这种情况下,一旦会话结束或更改它,它将不受影响。对其他会话没有影响。
如果你想影响所有客户端,请使用“@@global”,例如:
SET @@global.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".
在这种情况下,它只影响更改后连接的客户端(不影响当前所有客户端),一旦服务器退出,它将不起作用。