mysql之修改sql_mode允许时间类型字段默认值为'0000-00-00 00:00:00'

1、无论时间字段的类型是 timestamp 还是 datetime,设置默认值为 '0000-00-00 00:00:00'时会报错,默认值无效

2、原因,在MySQL的sql_mode中配置不允许其中包含字符0

3、解决方法

(1)用root账户登录MySQL

(2)查看全局的sql_mode配置

select @@global.sql_mode;

查询结果中有NO_ZERO_DATE和NO_ZERO_IN_DATE,就是我们日期不能设为0000-00-00的原因了

(3)修改全局的sql_mode配置值

set @@global.sql_mode=(select replace(@@sql_mode,'NO_ZERO_IN_DATE,NO_ZERO_DATE','')); 

替换其中的NO_ZERO_IN_DATE,NO_ZERO_DATE为空字符串

(4)此时,不需要重启MySQL服务器,但是需要关闭Navicat客户端该数据库的连接,再打开。此时,就可以设置时间类型字段默认值为'0000-00-00 00:00:00'了。

(5)特别注意:

这种修改配置只是修改了目前的状态,如果重新启动MySQL服务,那么配置就丢失了。

mysql.server status

mysql.server start

mysql.server stop

找到对应MySQL的配置文件my.cnf,添加下面的配置值

sql_mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

重启MySQL服务后,进入查看发现该配置值也修改了。

你可能感兴趣的:(mysql之修改sql_mode允许时间类型字段默认值为'0000-00-00 00:00:00')