mysql是使用docker安装的bitnami/mysql:5.7版本,在导入数据时报错,Error Code: 1067 - Invalid default value for 'xxx'
原因是因为这个字段为timestamp类型,而且默认值为’0000-00-00 00:00:00’,
'xxx' timestamp NOT NULL DEFAULT '0000-00-00 00:00:00'
查了下资料才知道原来5.7及以上版本是不允许这么设置的,那怎么解决呢?
是不是可以修改配置文件,查了下资料,有人说可以在my.inimysqld设置sql_mode。如:

[mysqld]
sql_mode=NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

这个bitnami/mysql跟我们平时使用的mysql安装目录有些区别,于是搜索了下docker官网,找了下mysql的配置文件所在路径
/opt/bitnami/mysql/conf/bitnami/my.cnf,把上面的配置加上了,重启了下docker,但发现没有效果,才发现原来重启之后刚才添加的配置不见了。
那换一种方式,既然我能连上mysql,那我是不是可以直接修改sql_mode呢?
查了下sql_mode

SHOW SESSION VARIABLES LIKE '%sql_mode%';

显示结果如下:

Variable_nameValue
sql_modeONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

NO_ZERO_IN_DATE,NO_ZERO_DATE这两个值就是导致报错的根源,需要去除,重新设置一下sql_mode

SET sql_mode="ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

然后重新导入,依然报同样的问题,奇了怪了。
最后查了下资料,需要设置为global

SET @@global.sql_mode ="ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

这样问题就解决了。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐