在本地搭建测试环境的时候,创建数据库报: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_DATE
和 NO_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;