Excel/CSV 导入数据库注意事项:编码、类型映射与分批执行

2026-07-02

从表格到数据库的完整路径

业务同事给的是 Excel 或 CSV,开发要在 SQL Server / MySQL 等库里落库。常见路线:

  1. 整理表格(表头、编码、去重)
  2. Excel 转 SQL 生成 INSERT / UPDATE / DELETE
  3. 在测试库执行脚本,核对行数与字段
  4. 分批导入生产库

本篇汇总导入过程中最容易踩坑的环节,配合 INSERTUPDATEDELETE 系列使用。

支持的文件格式

格式 支持 说明
.xlsx.xlsm.xltx.xltm 推荐,多 Sheet 可选
.csv UTF-8,逗号分隔;工具自动识别 BOM
.xls(Excel 97-2003) 请在 Excel 中「另存为 .xlsx

表头规则:第一行必须是列名,数据从第二行开始。无表头或合并单元格会导致列映射错乱。

CSV 编码与乱码

工具以 UTF-8 读取 CSV,并检测 BOM(字节顺序标记)。

现象 原因 处理
中文变乱码 文件实为 GBK/GB2312 Excel 另存为「CSV UTF-8」或用 CSV 转 Excel 检查
Excel 打开 CSV 列错位 字段含逗号未加引号 在 Excel 中整理后另存为 .xlsx 再上传
首列莫名多出字符 UTF-8 BOM 一般可正常解析;若异常,用无 BOM 的 UTF-8 重存

建议:对外交换数据统一 UTF-8;从 SQL 导出 CSV 时注意导出工具的编码选项。

列名与字段映射

  • 列名尽量与数据库字段一致,减少改映射的时间。
  • 工具会去掉列名中的空格;可在列矩阵里改为实际字段名(如 User NameUserName)。
  • 表名支持 dbo.TableName#TempTable 会附带 CREATE / INSERT 预览 / DROP,适合先灌临时表再 INSERT INTO ... SELECT

勾选列时只选需要进库的字段,忽略 Excel 里的备注列、序号列。

数据类型与 SQL 输出

Excel / CSV 内容 生成 SQL 中的表现
文本 单引号包裹,' 转义为 ''
日期 引号包裹,建议源数据用 yyyy-MM-dd 或 ISO 格式
整数 / 小数 不加引号
空单元格 NULL
布尔 / 是或否 按文本或数字处理,需与表结构一致

导入后若类型不匹配(如把 "N/A" 插入 int 列),需在 Excel 侧清洗,或导入临时表再用 SQL 转换。

语句类型怎么选

目标 语句类型 说明
新表灌数 INSERT 可开「批量 INSERT」,见 INSERT 指南
改已有记录 UPDATE 区分 SET 与 WHERE 列,见 UPDATE 指南
按 ID 删除 DELETE 必须指定 WHERE,见 DELETE 指南
先查 ID 是否存在 Select 生成 WHERE col IN (...) 便于核对

大数据量策略

  • 单次生成上限 50,000 行;更大文件请拆 Sheet 或拆 CSV。
  • 数千行以上优先 下载 .sql,避免在浏览器长时间预览。
  • 在 SSMS / 客户端中 分批执行,每批 500~1000 行,观察锁与日志。
  • 导入前可暂时 禁用非聚集索引,导入后重建,加快 bulk 插入。
  • 执行后用 @@ROWCOUNTSELECT COUNT(*) 核对。

开启 批量 INSERT 时,工具约每 500 行合并为一条 INSERT ... VALUES (...), (...),减少网络往返。

导入前数据清洗建议

  1. 去重:避免主键冲突(尤其邮箱、订单号列表)。
  2. 合并:多文件汇总后统一导入。
  3. 格式化:统一日期显示与表头样式,减少肉眼误判。
  4. 网页复制的表:先 HTML 转 Excel,再转 SQL,避免列错位。

多数据库方言

Excel 转 SQL 支持 SQL Server、MySQL、PostgreSQL、SQLite、Oracle。切换数据库类型后,标识符引号、部分语法会随方言调整。跨库迁移时先在目标库类型下生成脚本,不要直接复用另一种库的 SQL。

隐私与文件处理

Excel / CSV 上传后在服务端 解析并生成 SQL,处理完成后删除文件,不会长期存储。仍建议:

  • 生产敏感数据脱敏后再上传
  • 优先在测试环境使用
  • 大批量含个人信息时考虑内网部署或本地工具链

推荐执行流程(Checklist)

[ ] CSV 已 UTF-8,表头正确
[ ] 已在测试库试跑 INSERT/UPDATE/DELETE
[ ] 行数与 Excel 一致
[ ] 字符串、日期、NULL 符合表结构
[ ] 生产库已备份
[ ] 分批执行脚本
[ ] 导入后业务抽样验证

本系列(Excel 转 SQL)

延伸阅读


English version