mysql5.7 datetime 默认值为‘0000-00-00 00:00:00'值无法创建问题解决
数据库版本5.7.22
CREATE TABLE users (
id INT NOT NULL AUTO_INCREMENT,
name varchar(50) NOT NULL default '',
indate DATETIME NOT NULL default '0000-00-00 00:00',
PRIMARY KEY (id)
)AUTO_INCREMENT= 1 ENGINE=InnoDB DEFAULT CHARSET=utf8;
解决方案:
使用root登陆数据库
1、查看sql_mode:
mysql> select @@sql_mode;
ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
2、NO_ZERO_IN_DATE,NO_ZERO_DATE是无法默认为‘0000-00-00 00:00:00’的根源,去掉之后再次新建表就可以了
SET GLOBAL sql_mode='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
注:
NO_ZERO_IN_DATE:在严格模式下,不允许日期和月份为零
NO_ZERO_DATE:设置该值,mysql数据库不允许插入零日期,插入零日期会抛出错误而不是警告。
测试新建表,ok。可以了。
这个问题和mysql中sql_mode有关系,我们可以采用两种方法来查看它的值
方法一:
SHOW VARIABLES LIKE 'sql_mode%';
查询得到入下信息
方法二:
SELECT @@sql_mode;
解决办法
修改mysql配置文件(修改完重启服务)
win下修改my.ini
sql_mode='STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' #sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
linux
在my.cnf[mysqld]下添加
sql-mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
Mac系统下:
在MacOS中默认是没有my.cnf 文件,如果需要对MySql 进行定制,拷贝/usr/local/mysql/support-files/目录
中任意一个.cnf 文件。笔者拷贝的是my-default.cnf,将它放到其他目录,按照上面修改完毕之后,更名为 my.cnf,然后拷贝到/etc目录再重启下mysql就大功告成了。