导出时未加--compatible导致5.7+导入报错,因5.7默认启用STRICT_TRANS_TABLES而允许非法日期;应使用--compatible=mysql40导出,并统一字符集为utf8mb4,导入后执行ANALYZE TABLE更新统计信息。mysqldump导出时没加--compatible,导入5.7+报错Invalid default value for 'xxx'MySQL 5.7 默认开启 STRICT_TRANS_TABLES,而老版本(如5.6)允许0000-00-00这类非法日期作为默认值。直接导出再导入会触发严格模式校验失败。实操建议:导出时显式指定兼容模式:mysqldump --compatible=mysql40 --skip-extended-insert -u root -p db_name > dump.sql(mysql40能绕过大部分默认值校验)避免用--compatible=ansi或postgresql------它们会改写语法,反而增加解析负担如果目标库是8.0,还需注意sql_mode中是否含NO_ZERO_DATE,临时关闭它比改dump更稳妥:SET sql_mode = 'STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION';导入时卡在Creating table xxx,实际是字符集不匹配常见于从 Latin1 编码的旧库导出、导入到默认utf8mb4的新库:表结构里CHARSET=latin1被保留,但字段定义没同步更新,导致后续插入时报Incorrect string value。实操建议:导出时强制统一字符集:mysqldump --default-character-set=utf8mb4 -u root -p db_name > dump.sql导入前检查 dump 文件头是否有SET NAMES latin1,手动替换成SET NAMES utf8mb4若已导入部分表,别急着删库重来------用ALTER TABLE tbl CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;逐表修复mysqldump --single-transaction在5.6以下主从环境中可能丢数据--single-transaction依赖一致性快照,但 MySQL 5.5 及更早版本在启用binlog_format=STATEMENT时,某些DDL(如ALTER TABLE)会隐式提交事务,导致快照失效。结果是 dump 中混入了中间态数据。 AI Code Reviewer AI自动审核代码
相关推荐
绩隐金2 小时前
SQL Server 性能优化实战(第七期):内存架构——缓冲池、计划缓存与内存配置Greyson12 小时前
SQL触发器在导入大文件时如何跳过_使用禁用触发器语句导入Full Stack Developme2 小时前
Hutool JSON 操作教程2401_887724502 小时前
Redis怎样统计独立访客UV_基于Set的SADD指令天然去重特性MeAT ITEM2 小时前
maven导入spring框架RATi GORI2 小时前
SQL中的DISTINCT、SQL DISTINCT详解、DISTINCT的用法、DISTINCT注意事项qq_283720052 小时前
Python3 模块精讲:pyecharts —— 交互式数据可视化全解与实战m0_716430072 小时前
SQL如何处理时间序列缺失值_利用窗口函数进行前后值填充dLYG DUMS2 小时前
Redis——使用 python 操作 redis 之从 hmse 迁移到 hset