docker安装MySQL 5.7 timestamp类型设置default value为'0000-00-00 00:00:00'报错的解决方法

71 篇文章 0 订阅
57 篇文章 0 订阅

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.ini中mysqld设置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_name     Value
sql_mode     ONLY_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"

这样问题就解决了。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值