升级测试数据迁移数据库版本不兼容的问题:mysql5.7 timestamp默认值0000-00-00 00:00:00 报错

一、问题:在项目中会进行升级测试,迁移数据库数据时,新旧数据库两个版本不一样,从5.6迁移到5.7,mysql5.7版本 timestamp 不能为零日期 ,导入时就会报错,如下:

`RepaymentDate` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '回款日期',

报错就如:

[Err] 1067 - Invalid default value for 'RepaymentDate'
 
二、找出原因
 
这个问题和mysql中sql_mode有关系,我们可以采用两种方法来查看它的值
方法一:mysql> show variables like 'sql_mode%';

 方法二:

mysql> select @@sql_mode;

 

 可以看到,默认会有:NO_ZERO_IN_DATE 和 NO_ZERO_DATE 两个值,限制字段不能为零日期

三、解决方案

 方法二:执行命令(项目测试中我们用的这个方法)
mysql> set session sql_mode='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
set session sql_mode,仅对当前的会话有效,然后直接把sql语句拷贝到mysql>下,回车,表就可以创建成功
posted @ 2020-07-03 10:42  Z张不错  阅读(519)  评论(0编辑  收藏  举报