简介这份PDF文档面向需要将Excel电子表格数据批量迁移到MySQL数据库的开发者与数据库管理员尤其适合刚接触Navicat导入功能、希望快速完成结构化数据入库的初中级用户。资源包共1个PDF文件大小约189KB内容围绕Navicat导入向导展开涵盖环境版本说明、Excel列名与表字段对应、文件名英文规范、追加与覆盖模式选择以及导入失败时查看日志的排错思路可作为操作时的速查手册。目前已有6644人学习下载说明该场景需求普遍。读者可借此掌握从Excel准备到导入成功的完整流程减少手动录入的重复劳动提升数据迁移效率同时理解自增主键列的处理方式与常见报错定位方法适合作为日常数据导入任务的参考文档。1. 用 Navicat 把 Excel 灌进 MySQL一次把导入向导的脾气摸透手头有一份业务同事发来的 Excel几十列、几万行要落到 MySQL 里做后续查询和报表。你打开 Navicat右键表选「导入向导」一路下一步结果要么字段对不上要么日期变成一串数字要么中文变问号。这个场景太常见了——Navicat 的导入向导本身不难难的是它默认行为和 Excel 的「脏数据」之间那层错位。这篇笔记就围绕「使用 Navicat 将 Excel 数据导入 MySQL」这件事把导入向导的每一步参数、Excel 预处理、编码和类型映射讲清楚让你第一次跑通第二次能批量跑。适合已经装好 MySQL 和 Navicat、手里有真实 Excel 要落库的开发和运维如果你连 MySQL 都还没装先把mysql安装教程8.0那套流程走完再回来。2. 导入前先把 Excel 和 MySQL 表结构对齐2.1 为什么不能直接「下一步到底」Navicat 导入向导的核心逻辑是读 Excel 第一行当列名然后按列名去匹配目标表的字段。它不会帮你做模糊匹配也不会自动跳过说明行。很多人翻车就翻在 Excel 第一行是合并单元格的大标题第二行才是真正的列名向导把大标题当列名后面全乱。所以导入前必须做一件事把 Excel 整理成「第一行是干净列名下面是纯数据」的二维表。另一个错位点是类型。Excel 单元格没有类型概念一个列里可能混着数字、文本、空值。Navicat 读出来默认按它自己的推断给类型比如把手机号读成科学计数法、把日期读成45000这种序列号。解决办法是在 MySQL 侧先把表建好字段类型定死导入时让 Navicat 往已有表里灌而不是让它新建表。2.2 建目标表的字段类型对照下面这张表是我常用的映射规则照着建表基本不会出类型问题Excel 内容推荐 MySQL 类型说明纯整数 IDINT / BIGINT超过 10 位用 BIGINT手机号、身份证VARCHAR(20)绝不能用 INT会丢前导零和精度金额DECIMAL(12,2)不要用 FLOAT会有舍入误差日期DATETIME / DATE导入时指定格式别靠自动识别长文本、备注VARCHAR(500) / TEXT按实际长度留余量是/否TINYINT(1)Excel 里可能是「是/否」文本需转换建表语句示例CREATE TABLE order_import ( order_id BIGINT NOT NULL COMMENT 订单号, phone VARCHAR(20) DEFAULT NULL COMMENT 手机号, amount DECIMAL(12,2) DEFAULT NULL COMMENT 金额, order_date DATETIME DEFAULT NULL COMMENT 下单时间, remark VARCHAR(500) DEFAULT NULL COMMENT 备注, PRIMARY KEY (order_id) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4;逻辑说明主键order_id用 BIGINT 防止订单号溢出phone用 VARCHAR 保住前导零amount用 DECIMAL 保证金额精确字符集用utf8mb4这是解决中文乱码的第一道防线。参数上VARCHAR(20)对手机号够用VARCHAR(500)给备注留了余量实际按你数据最长值加 20% 设。2.3 Excel 侧的三个预处理动作第一删掉所有合并单元格把标题行压成一行。第二把日期列统一成yyyy-mm-dd hh:mm:ss文本格式或者干脆在导入向导里手动指定格式。第三检查有没有隐藏的空行和末尾的合计行这些行灌进去就是脏数据。做完这三步Excel 才算「可导入状态」。3. Navicat 导入向导逐步拆解与参数设置3.1 走一遍导入向导的完整路径在 Navicat 里右键目标表 → 导入向导 → 选择 Excel 文件 → 选工作表 → 设置字段映射 → 选导入模式 → 执行。看起来简单但每一步都有坑。第一步选文件时注意 Excel 有.xls和.xlsx两种老版本 Navicat 对.xlsx支持更好.xls偶尔读不全。如果文件是.xls先用 Excel 另存为.xlsx。第二步选工作表一个 Excel 有多个 sheet 时别选错。如果第一行不是列名把「首行包含列名」的勾去掉然后手动指定从第几行开始。第三步字段映射是核心。Navicat 会把 Excel 列名和目标表字段列出来你需要确认每一列的对应关系。源字段和目标字段类型不一致时它会标红或警告。3.2 字段映射和导入模式怎么选导入模式有三个选项追加、更新、追加或更新。含义如下追加直接 INSERT主键冲突就报错。更新按主键 UPDATE存在则更新不存在则跳过。追加或更新存在则更新不存在则插入最常用。如果你要反复导入同一份数据做增量选「追加或更新」并在映射里把主键字段对应好。注意「更新」模式依赖主键或唯一索引表上没主键它没法判断更新哪一行。字段映射界面里每个源列可以单独设「目标字段」和「默认值」。Excel 里空单元格导入时Navicat 默认写 NULL如果你希望空值写 0 或空字符串在这里设默认值。3.3 日期和编码这两个高频参数日期格式在映射界面有个「日期格式」选项默认可能是yyyy-mm-dd但你的 Excel 里是2024/1/5不匹配就会导入失败或变成 NULL。手动改成yyyy/mm/dd或对应格式。编码问题更隐蔽。Navicat 导入时有个「编码」下拉默认可能是UTF-8但如果你的 Excel 是从某些系统导出的 GBK 编码 CSV 改名成的 xls中文就会乱码。判断方法导入后查一行看中文是否正常乱码就换编码重导。MySQL 侧连接也要确认是utf8mb4可以在 Navicat 连接属性里设。-- 导入后验证中文和类型是否正确 SELECT order_id, phone, amount, order_date, remark FROM order_import LIMIT 10; -- 检查是否有导入失败的空值 SELECT COUNT(*) FROM order_import WHERE order_date IS NULL;逻辑说明第一条查前 10 行肉眼确认中文和日期第二条统计日期为空的行数如果数量异常说明日期格式没匹配上。参数上LIMIT 10只是抽样正式核对要跑全表 count 和源 Excel 行数对比。4. 导入翻车现场五类常见问题排查4.1 中文变问号或乱码现象导入后remark字段显示???或测试。 原因Excel 文件编码与 Navicat 导入编码不一致或 MySQL 表字符集不是utf8mb4。 解决先确认表字符集SHOW CREATE TABLE order_import;不是utf8mb4就ALTER TABLE ... CONVERT TO CHARACTER SET utf8mb4;然后在导入向导里把编码显式设为UTF-8或GBK试一次哪个正常用哪个。4.2 日期变成 45000 这类数字现象order_date导入后是45000而不是日期。 原因Excel 内部日期是序列号Navicat 按数字读进来了。 解决在 Excel 里把日期列格式设成文本yyyy-mm-dd hh:mm:ss再导入或在导入向导的字段映射里把该列类型指定为日期并填对格式字符串。4.3 手机号变成科学计数法或丢前导零现象13800138000变成1.38E10或013800138000变成13800138000。 原因Excel 把手机号当数字处理Navicat 按数字类型读。 解决Excel 里把该列设为文本格式MySQL 侧字段用 VARCHAR。已经导入错的只能清表重导。4.4 主键冲突导致整批失败现象导入报Duplicate entry xxx for key PRIMARY。 原因选了「追加」模式但数据里有重复主键。 解决改用「追加或更新」模式或导入前在 Excel 里用条件格式标出重复行先清理。如果只是想跳过重复也可以在 Navicat 里勾选「忽略错误继续」。4.5 导入到一半卡住或超时现象几万行导入到一半报连接超时。 原因单条 INSERT 逐行提交数据量大时耗时超过连接超时。 解决在导入向导的「高级」里把「每 N 条提交一次」调大比如 1000同时把 Navicat 连接属性里的超时时间从默认 30 秒调到 300 秒。数据量特别大时考虑先导成 CSV 再用LOAD DATA命令。5. 批量导入与自动化把重复劳动交给脚本5.1 用 Navicat 的批处理任务串起来如果每周都要导同一结构的 Excel可以在 Navicat 里建「自动运行」任务新建批处理作业 → 添加「导入」步骤 → 保存 → 设定时。这样不用每次点向导。注意批处理里的导入配置是保存下来的Excel 路径变了要改配置。5.2 数据量大时改用 LOAD DATA 兜底Navicat 导入向导本质是逐行拼 INSERT几万行还行上百万行就慢。这时候把 Excel 另存为 CSV用 MySQL 原生命令# 先把 Excel 另存为 UTF-8 编码的 CSV # 然后在 MySQL 客户端执行 mysql -u root -p --default-character-setutf8mb4LOAD DATA LOCAL INFILE /path/to/order.csv INTO TABLE order_import CHARACTER SET utf8mb4 FIELDS TERMINATED BY , ENCLOSED BY LINES TERMINATED BY \n IGNORE 1 LINES (order_id, phone, amount, order_date, remark) SET order_date STR_TO_DATE(order_date, %Y-%m-%d %H:%i:%s);逻辑说明IGNORE 1 LINES跳过 CSV 表头order_date先把日期读成变量再用STR_TO_DATE转成 DATETIME这样能处理各种日期格式。参数上FIELDS TERMINATED BY ,对应 CSV 逗号分隔如果 Excel 导出的是制表符分隔就改成\t。CHARACTER SET utf8mb4必须和文件编码一致。5.3 导入后做一次行数和抽样校验不管用哪种方式导完必须核对-- 行数对比和 Excel 有效数据行数比 SELECT COUNT(*) AS total FROM order_import; -- 抽样看边界值 SELECT * FROM order_import ORDER BY order_date DESC LIMIT 5; SELECT * FROM order_import WHERE amount IS NULL OR phone IS NULL LIMIT 5;行数对不上通常是空行被跳过或格式错误行被忽略抽样看日期最大最小值能发现格式解析错误。这一步花两分钟能省掉后面查半天数据的后悔药。5.4 一个我常踩的坑Navicat 导入向导里「追加或更新」模式如果表没有主键它会退化成纯追加重复数据照插不误。所以建表时一定设主键或唯一索引这是导入可重复执行的前提。另外导入前先在测试库跑一遍确认无误再导生产这个习惯帮我挡过好几次字段错位的事故。希望帮到你。本文还有配套的精品资源点击获取