TOC

MySQL 时间默认值 "0000-00-00 00:00:00" 不合法的问题

在本地搭建测试环境的时候,创建数据库报:Invalid default value for 'update_time'

`update_time` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00',

线上业务的 MySQL 版本是 5.6,本地是 5.7。

原因

SELECT @@SQL_MODE;

线上是:NO_ENGINE_SUBSTITUTION

我本地:ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

就是其中的 NO_ZERO_IN_DATENO_ZERO_DATE 闹的。

解决办法

SQL_MODE 这个系统变量可以在配置文件中修改。
但是我们只需要临时生效,创建这张表就行了,所以可以这么操作:

-- SELECT @@SQL_MODE;

-- 备份并修改 SQL_MODE
SET @OLD_SQL_MODE = @@SQL_MODE;
SET SQL_MODE = 'NO_ENGINE_SUBSTITUTION';

-- do something

-- 还原
SET SQL_MODE = @OLD_SQL_MODE;

-- SELECT @@SQL_MODE;

参考资料与拓展阅读