ZH
我的工具

CSV 转 SQL(CREATE TABLE + INSERT)

把 CSV 转成 SQL:根据数据推断列类型的 CREATE TABLE,以及适用于 MySQL、PostgreSQL、SQLite、SQL Server 和 Oracle 的批量 INSERT 或 upsert 语句。

允许使用 schema.table;名称会按数据库的方式加引号。
设置后,行会被插入或更新(ON CONFLICT、ON DUPLICATE KEY 或 MERGE)。
取消勾选后,空的文本单元格会变成 ''(数字和日期列中的空单元格始终为 NULL)。
我的工具 →
广告

把电子表格导入数据库,通常意味着要手写 CREATE TABLE,再写几百行 INSERT。粘贴 CSV(或从 Excel 复制的单元格),两者就都有了:列类型由数据推断(整数、精度合适的小数、布尔值、日期,以及长度合适的文本),行被写成批量的多行 INSERT;如果你指定了键列,则写成 upsert。标识符、字符串、布尔值和日期都按 MySQL、PostgreSQL、SQLite、SQL Server 或 Oracle 期望的方式书写。

使用方法

  1. 粘贴 CSV 数据,列名放在第一行。
  2. 输入表名并选择数据库。
  3. 选择是否包含 CREATE TABLE 和 DROP TABLE IF EXISTS。
  4. 可选:指定键列,得到 upsert 语句而不是普通 INSERT。
  5. 复制 SQL,在数据库客户端中运行。

计算公式

INSERT INTO 表 (列, …) VALUES (第 1 行), (第 2 行), …; — 每批行一条语句

类型:整数 → INTEGER(超出 ±2,147,483,647 为 BIGINT),小数 → DECIMAL(p,s)(p = 整数位数 + s 位小数),true/false → BOOLEAN(SQL Server 为 BIT,Oracle 为 NUMBER(1),SQLite 为 1/0),YYYY-MM-DD → DATE,带时间则为 TIMESTAMP/DATETIME,其他都是 VARCHAR(最长值) 或 TEXT。像 02134 这样以 0 开头的值保持为文本。单引号会写成两个;MySQL 还会把反斜杠写成两个。upsert 使用 ON CONFLICT(PostgreSQL、SQLite)、ON DUPLICATE KEY UPDATE(MySQL)或 MERGE(SQL Server、Oracle)。

示例

示例商品会生成 CREATE TABLE "products",其中 id INTEGER、name VARCHAR、email VARCHAR、price NUMERIC(4,2)(4.50、1.20 和 12)、in_stock BOOLEAN、added DATE;随后是一条含 3 行的 INSERT。第三行展示了单引号被写成两个,以及空日期变成 NULL;第二行的空邮箱也会变成 NULL。

常见问题

为什么我的数字列变成了 VARCHAR?

因为至少有一个单元格不是纯数字——可能带有千位分隔符、货币符号、单位或前导零。请在电子表格中清理该列,或在生成的 SQL 中修改类型。

最多能转换多少行?

在浏览器中最多 200,000 行。每条语句最多容纳 1000 行,这是 SQL Server 中一个 VALUES 列表的上限。

运行这些数据安全吗?

每个值都被写成带引号的字面量或经过验证的数字,所以单元格内容无法逃出语句。即便如此,在生产数据库上运行前也请先检查 SQL。

我的文件会被上传吗?

不会,转换在你的浏览器中完成。

资料来源

最后更新:

引用此工具
APA

kakaoCalc. (2026, November 8). CSV 转 SQL(CREATE TABLE + INSERT). https://kakao.mobile/zh/tools/csv-to-sql-tool/

MLA

“CSV 转 SQL(CREATE TABLE + INSERT).” kakaoCalc, 8 Nov. 2026, kakao.mobile/zh/tools/csv-to-sql-tool/.

广告