MySQL备份导入MariaDB时提示date_time字段默认值无效怎么解决
问题原因
你遇到的报错本质是当前使用的MariaDB版本不支持DATETIME类型设置CURRENT_TIMESTAMP作为默认值,该特性仅在MariaDB 10.0.1及以上版本支持,低于该版本的MariaDB仅允许TIMESTAMP类型使用该默认值配置。你已经配置的ALLOW_INVALID_DATES参数仅能规避非法日期格式校验,无法解决语法不支持的问题。
解决方法
- 方案1:升级MariaDB版本
直接将MariaDB服务升级到10.0.1及以上版本,无需修改现有备份文件,升级完成后重新执行导入即可。 - 方案2:修改备份文件中的建表语句
如果你暂时无法升级版本,可以手动调整报错的建表字段配置,两种可选改法:- 调整字段类型:将
date_time的字段类型从DATETIME改为TIMESTAMP,修改后语句为:
注意`date_time` timestamp DEFAULT CURRENT_TIMESTAMP,TIMESTAMP类型的时间范围为1970-2038年,如果你的业务数据涉及超出该范围的时间,不要使用该方案。 - 保留
DATETIME类型,删除默认值配置,通过触发器实现自动填充时间:
先修改字段定义为:
建表完成后执行触发器创建语句,实现插入数据自动填充当前时间:`date_time` datetime DEFAULT NULL,CREATE TRIGGER set_bid_datetime BEFORE INSERT ON `bid` FOR EACH ROW SET NEW.date_time = NOW();
- 调整字段类型:将
- 方案3:临时清空导入会话的sql_mode
执行导入操作前,先在当前数据库会话中执行如下语句,临时清空会话级sql_mode,再执行导入:
该修改仅对当前会话生效,不会影响全局配置。你可以在导入前执行SET sql_mode = '';SELECT @@sql_mode;确认配置生效后再操作。 - 方案4:重新生成兼容MariaDB的备份文件
在原MySQL服务器上重新执行mysqldump导出,增加兼容参数:
用新生成的备份文件在MariaDB侧导入即可避免该语法兼容问题。mysqldump --compatible=mariadb -u [用户名] -p [数据库名] > backup.sql
内容的提问来源于stack exchange,提问作者MMMWeirdo
相关产品推荐
相关产品推荐

