MySQL报Invalid default value错误

今天在还原数据库的时候给我抛了这样一个错误:

Invalid default value for ‘upload_time’

因为我是用 Navicat Premium 进行还原的,在我同学的 PC 上用 Navicat for MySQL 进行还原是可以的,所以我以为是版本的问题,后来换了 Navicat for MySQL 依然无果

还搜到了一堆说将 DATETIME 改为 TIMESTAMP;对于我来说这就是误导….

原因

最终发现是 MySQL 版本的问题,我所用的版本太高了,备份文件是在低版本中备份的,在高版本中(从 5.6.17 这个版本开始)就默认设置了不允许插入 0 日期了
术语是 NO_ZERO_IN_DATENO_ZERO_DATE

可以在 MySQL 的命令行中使用下面的命令进行查询:
SHOW VARIABLES LIKE 'sql_mode';
看看有木有 :NO_ZERO_IN_DATENO_ZERO_DATE 这两个参数,这两个参数限制不能为 0

解决方案

方案1

这是我采用的,实测有效!
在命令行或者 Navicat 下新建查询(必须是在 mysql 数据库下):

1
2
SET GLOBAL sql_mode = '';
commit;

这就是临时取消全部了…然后再执行还原备份操作就 OK 了

方案2

在 MySQL 的配置文件中的 [mysqld] 下面添加如下列:
sql_mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

这样就永久生效了
不过此方法我未测试,因为我也就是临时改改

参考

http://blog.csdn.net/myboyliu2007/article/details/50583088
http://www.youyong.top/article/1158cf96a49

喜欢就请我吃包辣条吧!

评论框加载失败,无法访问 Disqus

你可能需要魔法上网~~