CSV到SQL转换器

将CSV数据导入数据库通常意味着要么启动一个加载工具,要么编写仅适用于本地文件的COPY/LOAD DATA INFILE命令。对于数十、数百乃至数千行的小型数据集,直接粘贴到任意SQL控制台的普通INSERT语句往往更快。本工具接收你的CSV和一个表名,为每一行生成一条INSERT语句:标识符用反引号包裹,值用单引号包裹,可安全执行。

SQL语句的组装方式

  1. 1

    粘贴 CSV 文件

    标准CSV格式,可选包含标题行。解析器可处理包含内嵌分隔符的带引号单元格。

  2. 2

    设置表格名称

    表格名称中的非字母数字字符均替换为下划线;若为空值,则默认使用`my_table`。

  3. 3

    列来自标题

    若启用标题模式,则第1行将作为列列表;否则各列名称分别为`column_1`、`column_2`等。

  4. 4

    每条数据行对应一条INSERT

    每一行都会变为`INSERT INTO table (cols) VALUES (...)`。值用单引号包裹,值内部的单引号会被加倍。

方言、引号以及何时该改用其他方案

该生成器面向MySQL风格的SQL:标识符两侧用反引号,值两侧用单引号。大多数数据库只需稍作调整即可接受。

方言速查表

数据库 标识符引用方式 备注
MySQL 反引号 原样可用。
MariaDB 反引号 原样可用。
PostgreSQL 双引号 运行前把 ` 替换为 "
SQLite 双引号 ` 替换为 ",或去掉标识符引号。
SQL Server 方括号 ` 替换为 [];Unicode 请注意 N'...'

值是如何转义的

所有值都用单引号包裹,值中内嵌的单引号会被加倍(O'Brien 变为 'O''Brien')。这是 SQL-92 的做法,适用于所有主流数据库。该转换器不做类型转换,一切都以字符串字面量输出,因此当列为 INT 时,数据库的隐式转换会把 '42' 转为整数。

干净导入的技巧

  • 先创建表。 转换器只输出 INSERT 语句,不输出 CREATE TABLE。请搭配你手动定义或由 ORM 生成的表结构使用。
  • 拆分大文件。 如果你的 SQL 客户端对单条语句大小有限制,每次粘贴 500 至 1000 行。
  • 用事务包裹。 超过几百行时,把粘贴的内容用 BEGIN;COMMIT;(或 START TRANSACTION;/COMMIT;)括起来。这比逐条自动提交要快得多。

何时跳过 SQL 生成

如果文件超过约 50,000 行,原生批量加载工具(Postgres 的 COPY、MySQL 的 LOAD DATA INFILE、SQL Server 的 bcp)会比脚本生成的 INSERT 快一个数量级。本工具适合快速导入、填充测试数据和一次性迁移。

常见问题

不。该模块仅输出 INSERT 类型的语句。请提前使用 CREATE TABLE 自定义数据模式,这样您就能自主控制列类型、长度及约束条件,而无需让转换器自行推断。

只需做一项修改:将表格和列名称周围的反引号替换为双引号。数值使用单引号表示,可在任何SQL-92方言中直接运行且保持原样。

值内的单引号会被加倍(如 O''Brien),这是标准的 SQL 转义方式。反斜杠、百分号和下划线则原样传递,它们仅在 LIKE 模式中才具有特殊含义。

会。CSV 文件会发送到我们的服务器以生成 SQL 语句,但不会被存储,也不会被添加到页面链接中。

相关工具