跳到主要内容
数据处理2026-09-13Begin4 分钟阅读

在线 CSV 转 SQL 工具:将表格数据导入数据库

什么是 CSV 转 SQL

把 CSV 表格变成可粘贴执行的 INSERT 语句,方便往开发库灌演示数据、写文档示例,或做一次性小迁移。试试 CSV 转 SQL:同一输入还可输出 Markdown 表或 HTML 表。

与本站 MySQL 风格输出一致的示例

CSV:

id,name,email,age
1,张三,zhang@example.com,28
2,李四,li@example.com,32

SQL(反引号标识符;非空值一律字符串引号;数字不会裸写):

INSERT INTO `users` (`id`, `name`, `email`, `age`) VALUES
  ('1', '张三', 'zhang@example.com', '28'),
  ('2', '李四', 'li@example.com', '32');

把方言切到 PostgreSQL 后,标识符变为 "users" / "id"。若需要真正的整型列,请用 staging 表 + INSERT ... SELECT CAST(...),不要指望转换器「猜类型」。

为什么还需要这一步

  1. 开发库种子数据:几十到几百行,手写 INSERT 太慢
  2. 文档 / README 示例:Markdown 表模式可直接贴进文档
  3. 联调前造数:配合 CSV/JSON 从接口样例走到表结构演示
  4. 不是生产百万行 ETL——那种场景用 COPY / LOAD DATA / 正式管道

如何使用(真实 UI)

  1. 粘贴 CSV(第一行表头)
  2. 选择输出:SQL INSERT / Markdown Table / HTML Table
  3. SQL 模式下填写表名(默认 my_table),并选择标识符风格(MySQL 反引号 或 PostgreSQL 双引号)
  4. 转换并复制

分隔符:解析函数支持自定义 delimiter,但 UI 当前固定逗号。分号 CSV 请先经 CSV/TSV 规范化。

实现注记(与 parseCSV / csvToSQL 对齐)

解析

  • 支持引号字段、"" 转义、引号内换行
  • 表头 trim;空行跳过
  • 文件开头的 UTF-8 BOM 会先剥离(Excel 导出不再把首列表头弄成带不可见前缀的 id)
  • 某行列数不足时,缺列补空字符串(比双向 CSV/JSON 工具更宽容)
  • 不会把字面量 null / NULL 当成 SQL NULL——只有空单元格变成 NULL

SQL 生成

  • 标识符:MySQL 风格双写内部反引号;PostgreSQL 风格双写内部 "
  • 值:空 → NULL;非空 → '...',内部单引号 ' → ''
  • 不做数字裸写、布尔识别、日期解析
  • 一次生成一条多行 INSERT ... VALUES (...), (...);

Markdown / HTML

  • Markdown:单元格内 | 转义为 \|,避免拆表
  • HTML:对 & < > " 做实体转义,适合贴进静态页预览

仍在转换器之外的 Excel 坑

  • 日期序列号、前导零丢失属于导出阶段——先以文本列重导 CSV
  • 欧洲分号 CSV 仍需先做分隔符规范化

大文件边界

  • 浏览器内拼超大 SQL 字符串会卡顿;上千行演示尚可,万行以上改用数据库原生装载
  • 生成结果没有事务、没有 ON CONFLICT、没有批大小控制——需要幂等重跑时自行包事务并加主键策略

RFC 4180 四大边界(读 CSV 时)

  1. 字段内逗号 → 必须加引号
  2. 字段内双引号 → 写成 "",不是反斜杠
  3. 字段内换行 → 合法;wc -l 与逻辑行数常不一致
  4. UTF-8 BOM → 本工具解析前剥离;走 COPY/LOAD 时仍建议先剥

装载路径:INSERT vs COPY / LOAD

路径适用备注
本站批量 INSERT小表、演示、文档可选 MySQL / PostgreSQL 引号风格
PostgreSQL COPY ... CSV HEADER大文件快;注意编码
MySQL LOAD DATA大文件路径与 LOCAL 安全策略
SQLite事务内多 INSERT无原生 CSV bulk(扩展除外)

生产导入:TEXT staging → 可见的 CAST/:: 转型 → 正式表。类型决策留在 SQL 里审查,而不是藏在转换器里。

Excel 方言与可重复导入

  1. 分隔符:中文 Windows 有时是逗号,欧洲语言环境常是分号——分号文件先走 CSV/TSV
  2. 前导零 / 日期:在表格里把单号、邮编列设为文本再导出
  3. 幂等重跑:本工具不生成 ON CONFLICT / REPLACE——开发库反复灌数时先 DELETE/TRUNCATE,或自备 upsert

把 CSV→SQL 当成「可见的脚手架」,把类型与冲突策略留在你能审查的 SQL 里。

与 JSON / YAML / 格式化互链

步骤工具
表格 ↔ 对象CSV/JSON、JSON→CSV
分隔符CSV/TSV
INSERT 排版 / 压缩SQL 格式化
配置旁路YAML↔JSON
博文CSV/JSON 指南、JSON/CSV 指南、SQL 格式化指南

FAQ

字段里有换行怎么办?

用双引号包裹该字段。本站解析器按引号状态拼记录,不只按物理行切。

为什么数字两边有引号?

全部当文本插入,避免 00123 变整数。入库后用 SQL 转型。

字符串 null 会变成 SQL NULL 吗?

不会。只有空单元格 → NULL。这是有意区分,防止把合法文本「null」吃掉。

PostgreSQL 报语法错?

在方言控件里选 PostgreSQL,或手动把 `col` 改成 "col";单引号字符串转义('')两边通用。

大量导入很慢?

小数据用本工具;大数据用 COPY/LOAD DATA,并考虑临时禁用非必要索引、按批提交。

粘贴前先包事务、再核对行数

生成的 INSERT 很容易连跑两遍。先用 BEGIN / ROLLBACK 包住种子块,核对行数后再 COMMIT。共享开发库优先用临时 schema 或表后缀(_seed)。SQL 格式化 方便人读宽 INSERT,但不校验类型——CAST / :: 仍写在后续手写 SQL 里。

标识符引号 ≠ 字符串引号

MySQL 反引号与 PostgreSQL 双引号保护的是标识符(含空格或保留字的列名),不是字符串。值仍用单引号并以 '' 转义。混用(在 PostgreSQL 里把 "hello" 当值)会变成列引用,报出「缺列」这类看起来与 CSV 无关的错。复制前在 CSV→SQL 选对方言。


本文由 ToolVault 工具匣提供。相关工具:CSV→SQL、CSV/JSON、SQL 格式化、CSV/TSV。更多见首页。