环境配置
导出数据库版本:5.7.12.log
导入数据库版本:8.0.13
问题: 导出 SQL 脚本,再在高版本数据库中导入时,出现 Incorrect datetime value: ‘0000-00-00 00:00:00’ for column ‘create_time’
原因:官方文档上说明MySQL允许将’0000-00-00’保存为“伪日期”(如果不使用NO_ZERO_DATE SQL模式),就会报错
解决:
修改全局
set @@global.sql_mode = ‘STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION’;
修改当前
set @@sql_mode = ‘STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION’;
也可以更改my.ini配置文件
[mysqld]
sql_mode=STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION
然后重启数据库即可
备注:因为本次导入的 SQL 还包含创建EVENT,存储过程,在解决了上述问题之后,还出现如下错误:
ERROR 1418 (HY000): This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)
原因:
这是我们开启了bin-log, 我们就必须指定我们的函数是否是
1 DETERMINISTIC 不确定的
2 NO SQL 没有SQl语句,当然也不会修改数据
3 READS SQL DATA 只是读取数据,当然也不会修改数据
4 MODIFIES SQL DATA 要修改数据
5 CONTAINS SQL 包含了SQL语句
其中在function里面,只有 DETERMINISTIC, NO SQL 和 READS SQL DATA 被支持。如果我们开启了 bin-log, 我们就必须为我们的function指定一个参数。
解决办法
在 my.ini 配置文件中 [mysql] 节点下增加:
log_bin_trust_function_creators=1 即可以