mysql之修改sql_mode允许时间类型字段默认值为'000
2020-05-06 本文已影响0人
薛延祥
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;
![](https://img.haomeiwen.com/i18509533/665b546e389b61fc.png)
查询结果中有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为空字符串
![](https://img.haomeiwen.com/i18509533/b397d2b6d634c4fb.png)
(4)此时,不需要重启MySQL服务器,但是需要关闭Navicat客户端该数据库的连接,再打开。此时,就可以设置时间类型字段默认值为'0000-00-00 00:00:00'了。
(5)特别注意:
这种修改配置只是修改了目前的状态,如果重新启动MySQL服务,那么配置就丢失了。
mysql.server status
mysql.server start
mysql.server stop
![](https://img.haomeiwen.com/i18509533/24918f66df4f0e7c.png)
找到对应MySQL的配置文件my.cnf,添加下面的配置值
sql_mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
重启MySQL服务后,进入查看发现该配置值也修改了。
![](https://img.haomeiwen.com/i18509533/a4277f942ae75b9b.png)
![](https://img.haomeiwen.com/i18509533/d19ed48ac8d6d0a8.png)