CSV转SQL转换器
把表格导出的CSV变成数据库可以直接执行的脚本。表头行作为列名,每一行生成一条INSERT语句,引号和转义规则按你选择的SQL方言处理。
数据转换器
或将CSV, TSV, TXT … 文件拖放到此处 ·
单个文件最大 95 MB· 最多 20 个文件· 30 分钟后删除
文件在我们的服务器上处理,并在 30 分钟后删除。
CSV 和文本文件中分隔列的字符,读取和写入都适用。自动会从输入中检测,并以逗号写出。
UTF-8 适用于所有语言。如果 Windows 上的 Excel 打开 CSV 时重音字符或中日韩文字显示乱码,请选择带 BOM 的 UTF-8。
输入为 Excel、ODS 和 Numbers 时:只转换第一个工作表,或转换所有工作表(ZIP 中每个工作表一个 CSV,或 JSON 中每个工作表一个键)。
新电子表格中工作表标签的名称,最多 31 个字符。
对象数组会为每一行使用列名作为键;数组的数组更紧凑,并把表头作为第一个数组。
包裹所有行的外层元素名称;每一行会成为其中的一个 <row>。
用于 CREATE TABLE 和 INSERT 语句。只能使用字母、数字和下划线。
不同数据库的引号和列类型略有差异;请选择您要导入的数据库。
把日期单元格统一改写为一种格式。ISO (2026-10-18) 对数据库和代码最稳妥;保持原样则保留源文件中的显示方式。
使用方法
- 1
上传CSV文件
添加 1 个或最多 20 个 CSV 文件,每个不超过 95 MB。分号分隔和制表符分隔的文件会被自动识别。
- 2
设置表名和方言
在高级设置下,输入 SQL 表名并选择 SQL 方言:MySQL、PostgreSQL、SQLite 或 SQL Server。日期默认设为 ISO,日期字面量无需猜测即可导入。
- 3
转换并执行
点击转换为 SQL,查看 CREATE TABLE 语句,然后在数据库客户端或导入界面中运行该脚本。
CSV 转 SQL 会根据表头行生成 CREATE TABLE 语句,并为每行数据生成一条 INSERT,按 MySQL、PostgreSQL、SQLite 或 SQL Server 的规则加引号,运行一个脚本即可把电子表格导入数据库。
为什么要把CSV转成SQL INSERT语句
每种数据库都有快速的 CSV 导入工具,但每种都有限制。自 MySQL 8.0 起,服务器默认禁用 LOAD DATA LOCAL INFILE;PostgreSQL 中从文件 COPY FROM 需要超级用户权限或特定角色成员身份;SQL Server 的 BULK INSERT 读取的是服务器本机上的路径,而不是你的笔记本电脑。托管数据库往往只提供一个查询编辑器。
INSERT 脚本可以绕开这些问题。它是文本,可以阅读,可以作为初始数据提交到版本控制,并能在任何客户端中运行。代价是速度:几万行没有问题,而数百万行更适合用原生批量导入工具。如果参考数据保存在工作簿中,可以用 Excel 转 SQL 跳过 CSV 这一步。
CSV转SQL示例(MySQL)
CREATE TABLE `my_table` ( `id` INT, `name` VARCHAR(255), `joined` DATE ); INSERT INTO `my_table` (`id`, `name`, `joined`) VALUES (1, '王芳', '2026-03-02'), (2, 'Liam O''Brien', '2026-04-15');
四种SQL方言在输出上的区别
标识符用反引号包裹,如 order date,这也让 order 之类的保留字可以用作列名。
- 同样适用于 MariaDB
- 适合作为 phpMyAdmin 导入的默认选择
标识符使用标准双引号。加引号的名称会保留大小写,所以 "Email" 和 email 是两个不同的列。
- 超过 63 字节的名称会被截断
同样使用双引号,类型较灵活:声明为 INT 的列仍可存入文本,除非表被声明为 STRICT(SQLite 3.37.0 新增的选项)。
- 可在 sqlite3 命令行或 DB Browser for SQLite 中运行
标识符放在方括号中,如 [order date]。存放非拉丁字符的文本列需要使用 NVARCHAR 和 N'…' 字面量。
- 可在 SSMS 或 Azure Data Studio 中运行
| 机构 | 要求 | 来源 |
|---|---|---|
| MySQL 8.0 | max_allowed_packet 默认为 64 MB;超过该大小的单条语句会被拒绝 | — |
| SQL Server | 一条 INSERT … VALUES 列表最多接受 1,000 个行值表达式 | — |
| PostgreSQL | 超过 63 字节的标识符会被静默截断 | — |
| SQLite | 默认构建下一张表最多有 2,000 列 | — |
执行脚本前请检查这些事项
先看 CREATE TABLE 语句。列类型是根据值推测的,推测可能出错:邮政编码和电话号码看起来像数字,但必须保持为文本,否则 02134 会丢掉开头的 0。运行前请在脚本中修改类型,或者自己建表,只运行 INSERT 部分。
请在 SQL 表名中填入真实表名,而不是 my_table;如果客户端支持,请在事务中运行脚本,这样某一行出错时可以全部回滚。同一个 CSV 的其他转换目标见数据格式转换页面。
CSV与SQL脚本格式
CSV
逗号分隔值
CSV 是一种用于表格的纯文本格式,每一行是一条记录,列之间用逗号分隔。它从计算机早期就开始使用,RFC 4180 对其作了说明,不过许多变体使用分号或制表符,文本编码也各不相同。几乎所有电子表格、数据库和分析工具都能导入和导出 CSV,因此它是在系统之间传输数据的默认格式。CSV 只保存数值,不包含公式、格式、多个工作表或数据类型。
- 压缩方式
- –
- 透明度
- –
- 动画
- –
- 发布年份
- –
SQL
SQL 脚本
SQL 文件是由结构化查询语言语句(如 CREATE TABLE 和 INSERT)组成的纯文本脚本,数据库会按顺序执行。常用于数据库备份、迁移和共享示例数据。该语言本身是 ISO 标准,但 MySQL、PostgreSQL、SQLite 和 SQL Server 各有自己的方言,因此脚本在不同系统之间通常需要小幅修改。任何文本编辑器都能打开 SQL 文件,执行则需要数据库客户端。
- 压缩方式
- –
- 透明度
- –
- 动画
- –
- 发布年份
- –
当文件最终要变成数据库中的一张表,而你只能通过查询窗口访问数据库时,就需要把 CSV 转成 SQL:例如为新应用写入初始数据、导入参考列表,或在没有服务器权限的情况下把电子表格迁入 MySQL 或 PostgreSQL。
CSV转SQL常见问题
为什么用SQL文件,而不是LOAD DATA或COPY?
MySQL 的 LOAD DATA INFILE、PostgreSQL 的 COPY 等批量导入工具速度更快,但需要访问服务器上的文件,或额外设置客户端参数。普通脚本只要能粘贴 SQL 的地方都能运行:云数据库控制台、phpMyAdmin,或经过审核的迁移脚本。
O'Brien这类带撇号的名字怎么写入?
在 SQL 字符串中,单引号通过连写两个来转义,因此该值会写成 'O''Brien'。四种方言都支持这种写法,所以带撇号的姓名不会导致 INSERT 出错。
CSV表头在表里会变成什么?
列名,并按所选方言要求的方式加引号。像 Unit Price 这样的表头可以使用,但带空格的加引号名称在之后每条查询中也都必须加引号,所以如果可以,建议转换前先把这类表头改成 unit_price。
能用phpMyAdmin导入生成的SQL文件吗?
可以,在“导入”选项卡中操作。那里的上限是 PHP 的 upload_max_filesize,默认 php.ini 中为 2 MB;许多主机会调高该值,页面会显示当前限制。如果脚本比这个限制大,请把大 CSV 拆分成多个文件。
能把数据表再导回CSV吗?
把表导出为转储文件,再用 SQL 转 CSV 转换,或使用数据库客户端自带的 CSV 导出功能。两种方式得到的数据行都可以再次用电子表格打开。
- Excel转SQL在线转换将Excel表格转换为适用于MySQL、PostgreSQL、SQLite或SQL Server的SQL脚本。表头生成列,每行生成INSERT语句。
- SQL转CSV在线转换把.sql转储文件中的INSERT语句转换为CSV行,可直接用Excel或Google Sheets打开。支持MySQL、phpMyAdmin、SQLite和SQL Server导出的转储文件。
- CSV转XLSX转换器将CSV转换为Excel XLSX工作簿,前导零、长编号和带重音的文字完整保留。自动识别逗号、分号和制表符分隔的文件。
- CSV转XML转换器在线将CSV行转换为格式规范的XML,可自定义根标签。自动转义特殊字符,自动识别分隔符,输出UTF-8编码,一次最多20个文件。
- CSV转Parquet在线转换在线将CSV转换为Apache Parquet,每列带数据类型并经过压缩,可直接用于pandas、DuckDB、Spark、BigQuery或Athena。无需安装Python或配置Spark。
- Parquet转CSV在线转换在线将Apache Parquet文件转换为CSV,可直接用Excel、Google Sheets或任意导入工具打开。无需Python、Spark或DuckDB,最多20个文件。