excel转sql | Excel 格式转换 - 免费在线完成excel转换sql 纯前端解析,无需上传
excel转sql工具介绍
excel转sql 是一款完全免费、基于浏览器本地运行的表格格式转换工具,具有按表头生成列名、字符串自动加单引号并转义、数字与空值分别处理、多工作表打包 ZIP 等功能,能解决手写 INSERT 容易漏引号或拼错列名、含单引号的内容破坏语法等问题,适合历史台账迁移、字典表初始化、测试数据构造等场景。例如,源表客户名为 O'Brien,手写 INSERT 时若不转义会直接报语法错误,本工具会输出 'O''Brien';源表中某个单元格为空,则输出为 NULL 而非空字符串,符合 SQL 语义。表名默认取 Sheet 名,列名取表头,生成的 .sql 可直接在 MySQL、PostgreSQL、SQLite 中执行。
excel转sql是什么
excel转sql 就是把 Excel 工作簿中的表格数据转换为 SQL 语句的过程。本工具使用 SheetJS(xlsx)在浏览器内完成解析,逐个读取工作簿中的工作表,将第一行识别为列名,其余每一行生成一条 INSERT INTO 语句,最终输出可直接执行的 .sql 文件。转换时会自动判断字段类型:数字不加引号、字符串加单引号、日期按字面量处理;对内容中出现的单引号、反斜杠等特殊字符做转义,避免语法错误或注入风险。导出的 .sql 文件使用 UTF-8 编码,中文内容不会出现乱码。INSERT 是 SQL:2016 标准中的基础语句,本工具生成的语法在所有主流数据库中通用。
什么是 Excel 和 SQL
Excel 是微软 Office 套件中的电子表格软件,其原生文件格式 .xlsx 基于 Office Open XML 标准,本质上是一个 ZIP 压缩包,内部包含 XML 描述的工作表、样式、共享字符串、公式等资源;旧版本 .xls 则使用二进制 BIFF 格式。SQL(Structured Query Language,结构化查询语言)是关系型数据库的标准操作语言,用于建表、查询、插入、更新与删除数据,是 MySQL、PostgreSQL、SQL Server、Oracle、SQLite 等数据库的通用接口。相比 Excel,SQL 语句更适合批量落库、脚本化执行、纳入版本管理,因此把 Excel 转成 SQL 是数据导入、系统初始化、数据迁移中最常见的操作之一。
Excel 与 SQL 的核心差异
| 维度 | Excel (.xlsx) | SQL (.sql) |
|---|---|---|
| 数据结构 | 二维表格,行与列 | 表结构,行与列 + 主键、索引 |
| 类型系统 | 自动推断,类型模糊 | 严格类型,INT / VARCHAR / DATE 等 |
| 空值语义 | 空单元格,与空字符串不分 | NULL 与 '' 严格区分 |
| 重复执行 | 手工录入,易重复 | 脚本可回滚、可重复执行 |
| 版本控制 | 二进制 diff 困难 | 文本可 diff,逐行对比 |
| 典型消费方 | Excel、WPS、Numbers | MySQL、PostgreSQL、SQLite、SQL Server |
数据类型映射规则
本工具按如下规则把 Excel 单元格类型映射为 SQL 值:数值型输出为裸数字,例如 199;字符串加单引号,例如 '键盘';日期型按字面量输出为 '2024-01-15';空单元格输出为 NULL(而非空字符串 '');布尔型按数据库方言输出为 1/0 或 TRUE/FALSE。例如,源表一行数据为 1 / 键盘 / 199 / 空,会输出为 INSERT INTO `Sheet1` (`id`, `name`, `price`, `stock`) VALUES (1, '键盘', 199, NULL);。其中 199 是裸数字而非 '199',NULL 与空字符串在 SQL 中有明确区别,前者表示"未知",后者表示"空值"。
excel转sql的应用场景?
常见场景包括:把历史 Excel 台账批量导入业务系统数据库;为测试环境构造初始数据,避免手动敲 SQL;将产品清单、价格表、字典表转成 SQL 后一次性执行;把销售数据、会员名单迁移到 MySQL、PostgreSQL、SQL Server 等数据库;为数据仓库 ETL 流程准备源数据;把 Excel 报表转成 SQL 后在 CI/CD 流水线中自动执行;以及为临时环境快速造数据。对于需要重复执行、可回滚、可审计的场景,SQL 脚本比手动录入更可靠、更高效。
常见陷阱与规避方法
第一类是单引号未转义:客户名 O'Brien 若不转义会直接报语法错误,本工具自动输出为 'O''Brien'。第二类是长数字精度丢失:身份证号、银行卡号超过 15 位后,Excel 与 JavaScript 都按浮点数处理,末位可能变 0,建议在源表中设为文本格式。第三类是前导零丢失:工号 001 会被当作数字 1 写入,若目标列是 VARCHAR,写入的是 '1' 而非 '001',建议源表设为文本。第四类是日期格式不统一:源表中同一列混用 2024/1/15、2024-01-15、2024年1月15日 会导致部分行按文本写入,建议统一格式。第五类是列名含特殊字符:表头中有空格、中文、SQL 保留字时需用反引号或双引号包裹,本工具会自动处理。
excel转sql的原理?
转换时首先用浏览器 FileReader 读取文件的二进制内容,交给 SheetJS 解析为一个工作簿对象,其中包含所有工作表及其单元格数据。随后遍历每个工作表,将第一行作为列名,逐行拼接为 INSERT INTO `表名` (`列1`, `列2`) VALUES (值1, 值2); 形式的语句;表名默认取 Sheet 名,列名取自表头,值按类型区分是否加引号。完全没有数据的空表会被自动过滤,只保留有效工作表。若工作簿只有一个非空表,则直接下载为 .sql;若有多个,则用 JSZip 把每个表单独导出为 SQL 后打包成 ZIP,避免文件互相覆盖。整个流程完全在浏览器本地完成,关闭页面后数据自动清除,不会留下任何痕迹。
SQL 方言与字符集注意事项
虽然 INSERT 语句是标准 SQL,但不同数据库在细节上有差异。标识符引用符号:MySQL 用反引号 `列名`,PostgreSQL 与 SQLite 用双引号 "列名",SQL Server 用方括号 [列名];字符串拼接:MySQL 用 CONCAT(),SQL Server 用 +,PostgreSQL 用 ||。字符集方面,MySQL 建库时建议用 utf8mb4(而非老旧的 utf8),可完整支持 Emoji 与四字节字符;导入时若用命令行客户端,加上 --default-character-set=utf8mb4 参数可避免中文乱码。PostgreSQL 默认 UTF-8,一般无需额外设置。SQL Server 若列类型为 NVARCHAR 才能完整存储中文。
生成的 SQL 如何导入执行
各数据库的导入方式略有不同。MySQL 可在命令行执行 mysql -u root -p --default-character-set=utf8mb4 dbname < data.sql,或进入客户端后用 source /path/data.sql;PostgreSQL 用 psql -U postgres -d dbname -f data.sql;SQLite 用 sqlite3 dbname.db < data.sql;SQL Server 用 sqlcmd -S localhost -U sa -i data.sql。若数据量大,建议先在目标表上临时关闭索引与约束(如 MySQL 的 SET unique_checks=0; SET foreign_key_checks=0;),导入完成后再恢复,速度可提升数倍。若脚本中有大量 INSERT,还可用事务包裹(BEGIN; ... COMMIT;)减少提交次数。
excel转sql常见问题
支持 .xlsx(Office 2007 及以后)和 .xls(旧版二进制格式)两种主流 Excel 文件。带密码保护或工作表加密的文件无法解析,会提示转换失败。上传时建议单个文件不超过 50MB,超大文件可能因浏览器内存限制而转换缓慢或失败。
会全部转换为独立的 SQL 文件。如果工作簿只有一个非空工作表,直接下载 .sql;如果有多个,则打包为 ZIP 下载,ZIP 内每个工作表对应一个以 Sheet 名命名的 .sql 文件。同名工作表会自动加数字后缀去重,避免互相覆盖。
默认输出为 INSERT INTO 语句,格式为 INSERT INTO `表名` (`列1`, `列2`) VALUES (值1, 值2);。表名默认取 Sheet 名,列名取自表头第一行;数字不加引号,字符串加单引号,日期按字面量处理,空单元格输出为 NULL。生成的 SQL 可直接在 MySQL、PostgreSQL、SQL Server、SQLite 等数据库中执行。
会自动转义。例如 O'Brien 会输出为 'O''Brien',把单个单引号替换为两个单引号,这是 SQL 标准中字符串内单引号的转义方式。这样生成的语句不会破坏语法,直接执行即可。
输出为 NULL,而不是空字符串。在 SQL 中 NULL 表示"未知值",空字符串表示"已知的空值",两者语义不同,很多业务表要求未填写的字段为 NULL 而非空字符串。若目标列是 NOT NULL 约束,需先在 Excel 中补齐数据再转换。
会。超过 15 位的数字在 Excel 和 JavaScript 中都按浮点数处理,末位可能被改写为 0。建议在源 Excel 中把该列设为文本格式,或在数字前加单引号,让单元格以字符串形式存储,导出时会作为字符串写入 SQL,完整保留原始数字。
不会。完全没有单元格数据的空表会被自动跳过,只有格式但没有内容的表也会被过滤。所以哪怕原始 Excel 里有几个占位的空白 Sheet,导出的 ZIP 里也只会包含真正有数据的表。如果所有表都为空,会提示"该 Excel 没有可导出的有效数据"。
不会。导出的 .sql 文件使用 UTF-8 编码,中文字段名与字段值都能正常显示。在 MySQL 中执行时建议确保连接与库表使用 utf8mb4 字符集,避免个别环境出现乱码。若在 Windows 命令行用 mysql 客户端导入时出现乱码,可加上 --default-character-set=utf8mb4 参数。
不会。所有解析和转换都在你的浏览器里完成,文件不会上传到任何服务器,关闭页面后数据自动清除。你可以断网使用本工具,进一步验证其本地运行特性,隐私安全有保障,尤其适合处理会员名单、订单数据、内部台账等敏感数据。