CSV 转 SQL 转换器
在浏览器中把 CSV 转成 SQL INSERT 语句,可附带 CREATE TABLE,支持 MySQL、PostgreSQL、SQLite。保留前导零,转义 MySQL 反斜杠,处理引号字段与 NULL。
- 在浏览器中处理
- 数据不离开你的设备
- 免费 · 无需注册
用微信扫描以下二维码即可分享
示例、说明与常见问题 带实际输出的示例、与同类工具的差别,以及常见问题。
值的写法
- 空字段输出
NULL。 - 非空单元格全是普通数字(
42、-7、19.90)的列不加引号。普通数字指没有前导零、没有+、没有指数、最多 15 位数字。 - 其他列一律输出带引号的字符串,其中的数字也加引号,所以
02134、1e5、20 位卡号都保持原文。目标列是数值类型时,MySQL、PostgreSQL、SQLite 都会自动转换带引号的数字。 - 所有方言都把单引号写成两个(
O”Brien)。MySQL 还会把反斜杠加倍:MySQL 默认的 SQL 模式把字符串里的\n读成换行(MySQL 8.4 Reference Manual, String Literals,表 11.1)。PostgreSQL 在standard_conforming_strings开启时(9.1 起的默认值,PostgreSQL 4.1.2.1)和 SQLite 都把反斜杠原样保存。 - 超出表头的单元格会补上
column_3、column_4等列,并在状态栏列出。较短的行用NULL补齐。
示例:引号、前导零与空字段
输入(SQLite,批量模式,表名 customers):
id,name,zip,note
1,"O'Brien, Pat",02134,
2,Lee,10001,"path C:\new"
INSERT INTO "customers" ("id", "name", "zip", "note") VALUES
(1, 'O''Brien, Pat', '02134', NULL),
(2, 'Lee', '10001', 'path C:\new');
带引号的 “O’Brien, Pat” 保留了逗号,空的 note 成为 NULL。02134 让 zip 列成为文本列,所以 10001 也加了引号。在 SQLite 3 中执行后,SELECT zip FROM customers 返回 02134 和 10001。
同样的输入选 MySQL 时反斜杠加倍,存进去的仍是 path C:\new:
id,name,zip,note
1,"O'Brien, Pat",02134,
2,Lee,10001,"path C:\new"
INSERT INTO `customers` (`id`, `name`, `zip`, `note`) VALUES
(1, 'O''Brien, Pat', '02134', NULL),
(2, 'Lee', '10001', 'path C:\\new');
如果服务器的 sql_mode 含 NO_BACKSLASH_ESCAPES,反斜杠就是普通字符,这时请改用 PostgreSQL 或 SQLite 的输出。
示例:CREATE TABLE
勾选添加 CREATE TABLE 后,列类型按值选择:整数为 INTEGER(MySQL 为 INT,超过 2,147,483,647 为 BIGINT),带小数点的数字为 DOUBLE PRECISION(MySQL 为 DOUBLE,SQLite 为 REAL),其余为 TEXT。PostgreSQL:
order_id,amount,paid_at
1001,19.90,2026-09-30
1002,5,
CREATE TABLE "orders" ("order_id" INTEGER, "amount" DOUBLE PRECISION, "paid_at" TEXT);
INSERT INTO "orders" ("order_id", "amount", "paid_at") VALUES
(1001, 19.90, '2026-09-30'),
(1002, 5, NULL);
类型有讲究时请先改再执行:金额应使用 NUMERIC / DECIMAL,paid_at 这类日期应使用 DATE 或 TIMESTAMP。工具不添加主键与约束。
示例:单元格比表头多
sku,qty
A-1,3,fragile
B-2,5
INSERT INTO "stock" ("sku", "qty", "column_3") VALUES ('A-1', 3, 'fragile');
INSERT INTO "stock" ("sku", "qty", "column_3") VALUES ('B-2', 5, NULL);
状态栏会报告补上的 column_3,需要正式列名时在表头行里改名即可。
限制
- 分隔符只支持逗号,第一行总是表头。分号或制表符分隔的文件需要先转换。
- 类型只根据文本判断,日期、布尔值和
1e5都按字符串处理。 - 表名和列名作为单个标识符加引号,
public.users会成为一个含点号的名字。 - 大文件在浏览器标签页中一次性转换;上百万行请用数据库自带的批量导入(
LOAD DATA、COPY、.import)。
FAQ
这个工具做什么?
把 CSV 数据转换成 SQL INSERT 语句,可选附带 CREATE TABLE。表头行作为列名,每个数据行成为一组值,按所选方言加引号并转义。
支持哪些 SQL 方言?
MySQL(标识符用反引号,字符串中的反斜杠加倍)、PostgreSQL 和 SQLite(标识符用双引号,反斜杠原样写出)。三者的 INSERT 语法相同。
NULL 值怎么处理?
空字段转为不加引号的 NULL。只含空格的字段是字符串,不是 NULL。工具无法生成空字符串 ''。
为什么 02134 加了引号,10001 有时不加?
只有当一列的所有非空单元格都是普通数字(无前导零、无加号或指数、最多 15 位)时,这一列才按数字输出。02134 不是普通数字,所以整个 zip 列都加引号,前导零得以保留。
数据会发送到服务器吗?
不会。转换在浏览器中用 JavaScript 完成,CSV 数据不会被传输。