DevToolPal
简

CSV 转 SQL

把 CSV 转换成 MySQL、PostgreSQL、SQLite 或 SQL Server 的 CREATE TABLE 和 INSERT 语句,自动推断列类型。

本地处理,不上传

选项

输入

0 字符 · 0 B

输出

0 字符 · 0 B

这是什么

把表格数据导入数据库,通常要手写建表语句和一长串 INSERT 语句,还得逐个转义单引号。这个工具帮你完成这些:粘贴 CSV,得到一份可以直接执行的 SQL 脚本,包含 CREATE TABLE 语句和分批的多行 INSERT 语句。

它按 RFC 4180 处理带引号的字段、单元格里的逗号和换行,以及双写的引号。字符串会按所选数据库正确转义,包括 MySQL 里的反斜杠和 SQL Server 的 N'…' Unicode 字符串。

怎么用

  1. 粘贴 CSV,上传 .csv 或 .tsv 文件,或点 示例。
  2. 填写 表名。需要指定 schema 时用点分隔,例如 public.orders 或 dbo.orders。
  3. 选择 数据库:MySQL / MariaDB、PostgreSQL、SQLite 或 SQL Server。
  4. 选择 每条 INSERT 的行数;如果表已经存在,关闭 CREATE TABLE。
  5. 复制 SQL 或下载成 .sql 文件,用数据库客户端执行。

分隔符会自动识别,也可以手动指定逗号、分号、Tab 或竖线。如果第一行是数据而不是列名,关闭 第一行是表头,列会依次命名为 column_1、column_2 等。

示例

下面这段 CSV:

id,name,price,in_stock
1,Ada's Tea,4.50,true
2,Coffee,,false

会生成这样的 PostgreSQL 脚本:

CREATE TABLE "products" (
  "id" INTEGER,
  "name" TEXT,
  "price" NUMERIC(3, 2),
  "in_stock" BOOLEAN
);

INSERT INTO "products" ("id", "name", "price", "in_stock") VALUES
  (1, 'Ada''s Tea', 4.50, TRUE),
  (2, 'Coffee', NULL, FALSE);

Ada's 里的单引号被双写,空的价格变成 NULL,数字和布尔值不加引号。

类型和方言

  • MySQL / MariaDB:反引号标识符,INT、DECIMAL、BOOLEAN、DATE、DATETIME、VARCHAR(255) 或 TEXT;字符串里的反斜杠会被转义。
  • PostgreSQL:双引号标识符,INTEGER、NUMERIC、BOOLEAN、DATE、TIMESTAMP 和 TEXT。
  • SQLite:双引号标识符,使用 SQLite 的存储类型 INTEGER、REAL 和 TEXT;布尔值写成 1 和 0。
  • SQL Server:方括号标识符,INT、DECIMAL、BIT、DATE、DATETIME2 和 NVARCHAR,字符串写成 N'…',每条 INSERT 最多 1000 行。
  • 空单元格写成 NULL。关闭 空单元格写成 NULL 后,文本列保留空字符串。
  • 在生产数据上执行前请检查推断出的类型:示例数据里只有小数字的列,以后可能需要更宽的类型。

常见问题

› 支持哪些数据库?

MySQL(及 MariaDB)、PostgreSQL、SQLite 和 Microsoft SQL Server。选择的数据库决定表名和列名的引用方式、字符串的转义方式、使用的列类型以及布尔值的写法。

› 列类型是怎么确定的?

工具会扫描每一列:整数用 INT 或 BIGINT,小数用精度足够的 DECIMAL,true/false 用 BOOLEAN(SQL Server 用 BIT),ISO 日期用 DATE 或 DATETIME,其余都用文本类型。带前导零的数字(如邮编)保持文本。关闭「识别类型」后所有列都是文本。

› 为什么 SQL Server 每条 INSERT 最多 1000 行?

SQL Server 不接受超过 1000 行的 VALUES 列表,所以在这个方言下更大的批量会被限制为 1000。其他数据库可以接受更大的批量,但每条语句 100 到 1000 行在速度和语句长度之间比较均衡。

› CSV 会上传吗?

不会。解析和生成 SQL 都在浏览器里完成,数据不会离开你的设备。