CSV 转 SQL(CREATE TABLE + INSERT)
把 CSV 转成 SQL:根据数据推断列类型的 CREATE TABLE,以及适用于 MySQL、PostgreSQL、SQLite、SQL Server 和 Oracle 的批量 INSERT 或 upsert 语句。
把电子表格导入数据库,通常意味着要手写 CREATE TABLE,再写几百行 INSERT。粘贴 CSV(或从 Excel 复制的单元格),两者就都有了:列类型由数据推断(整数、精度合适的小数、布尔值、日期,以及长度合适的文本),行被写成批量的多行 INSERT;如果你指定了键列,则写成 upsert。标识符、字符串、布尔值和日期都按 MySQL、PostgreSQL、SQLite、SQL Server 或 Oracle 期望的方式书写。
使用方法
- 粘贴 CSV 数据,列名放在第一行。
- 输入表名并选择数据库。
- 选择是否包含 CREATE TABLE 和 DROP TABLE IF EXISTS。
- 可选:指定键列,得到 upsert 语句而不是普通 INSERT。
- 复制 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。
我的文件会被上传吗?
不会,转换在你的浏览器中完成。
资料来源
最后更新:
包含这些输入的页面地址: https://kakao.mobile/zh/tools/csv-to-sql-tool/
引用此工具
kakaoCalc. (2026, November 8). CSV 转 SQL(CREATE TABLE + INSERT). https://kakao.mobile/zh/tools/csv-to-sql-tool/
“CSV 转 SQL(CREATE TABLE + INSERT).” kakaoCalc, 8 Nov. 2026, kakao.mobile/zh/tools/csv-to-sql-tool/.