SQL 转换(SQL Conversion)是指把 SQL 脚本中的数据提取出来,重新组织为 JSON、CSV、XML、YAML、HTML、Markdown 等其他数据格式的过程。SQL(Structured Query Language,结构化查询语言)是关系型数据库的标准查询语言,数据库导出工具(如 mysqldump、pg_dump)通常会把数据导出为 INSERT 语句形式的 SQL 脚本,这种格式虽然便于数据库导入,但不便于程序读取、数据分析或跨系统交换,因此需要转换为更通用的格式。
常见的 SQL 数据导出脚本包含两类语句:CREATE TABLE 用于定义表结构(列名、数据类型、约束),INSERT INTO ... VALUES (...) 用于插入具体数据。本工具会解析这两类语句,从 CREATE TABLE 提取列定义和类型信息,从 INSERT 提取实际数据行,然后按用户选择的格式重新组织输出。整个解析过程在浏览器本地完成,不依赖任何后端服务。
为什么需要把 SQL 转换为其他格式?SQL 脚本虽然通用,但在以下场景中并不便利:第一,前端程序读取 JSON 比解析 SQL 容易得多,无需引入 SQL 解析器;第二,Excel、Google Sheets 等表格软件原生支持 CSV 而非 SQL;第三,配置文件和文档场景中 YAML、Markdown 比 SQL 更易读;第四,跨系统数据交换常使用 XML 或 JSON 作为中性格式。把 SQL 转为这些通用格式后,数据可以被更多工具和语言直接消费。
本工具的 SQL 解析器手写实现,专注于 INSERT 语句和 CREATE TABLE 语句的解析。对于 INSERT 语句,支持单值元组(INSERT INTO t (a,b) VALUES (1,2))和多值元组(INSERT INTO t (a,b) VALUES (1,2), (3,4), (5,6))两种语法,自动按列名映射数据。对于 CREATE TABLE 语句,支持解析列定义、数据类型(VARCHAR(255)、INT、DECIMAL(10,2) 等带括号长度)、NOT NULL、PRIMARY KEY、IF NOT EXISTS 等约束和子句,正确处理嵌套括号避免错误拆分。
类型识别是 SQL 转换的关键。工具会根据值的字面量形式自动判断类型:以单引号或双引号包裹的为字符串;NULL(不区分大小写)为空值;TRUE/FALSE 为布尔值;0x...、X'...'、B'...' 为十六进制字面量;纯数字(含负号、小数点、科学计数法)为数字。这种自动类型识别确保转换后的 JSON、CSV 等格式能保留原始数据的语义(如数字 1 不是字符串 "1"),便于下游程序正确处理。
不同数据库方言的引号风格差异是 SQL 解析的常见坑点。MySQL 默认使用反引号(`)包裹标识符(表名、列名),PostgreSQL 使用双引号("),SQL Server/T-SQL 使用方括号([]),标准 SQL 也使用双引号。本工具的 unquoteIdentifier 函数会自动识别并去除这些引号,同时处理引号内的转义(如 `` → `、"" → ")。在 SQL 重建模式下,可按目标方言重新生成对应引号风格的 INSERT 语句。
SQL 字符串转义是另一个关键技术点。SQL 标准规定字符串内的单引号通过双写转义('It''s' 表示 It's),MySQL 默认还支持反斜杠转义(\n、\t、\'、\"、\\、\0、\Z 等)。本工具的字符串解析器会同时处理这两种转义机制,正确还原原始字符串内容。在转换为 CSV 时,会按 RFC 4180 标准对包含逗号、引号、换行的字段重新转义;在转换为 XML/HTML 时,会转义 &、<、>、"、' 等特殊字符。
纯前端处理是本工具的核心设计原则。所有 SQL 解析和数据转换都在浏览器的 JavaScript 引擎中执行,不向服务器发送任何数据。这意味着即使 SQL 脚本包含用户隐私、商业敏感信息或内部数据库结构,也不会泄露到外部。这种设计特别适合处理生产数据库的导出,无需担心数据合规问题。同时,前端处理没有网络延迟,转换速度仅受设备 CPU 和内存限制。
本工具与传统的命令行 SQL 转换工具(如 sql2csv、sqlparser)相比有几个优势:无需安装和配置环境,打开网页即可使用;提供可视化界面实时预览转换结果;支持多种输出格式一键切换;内置示例数据和帮助文档;移动端响应式设计随时随地可用。但相应地,本工具专注于数据提取,不处理复杂的 SQL 方言差异(如 PostgreSQL 的 JSONB 操作符、MySQL 的 ON DUPLICATE KEY UPDATE)和高级特性(存储过程、函数、触发器),如有这类需求建议使用数据库原生工具或专用 ETL 平台。
在使用 SQL 转换工具时,有几个最佳实践值得注意:第一,转换前先检查 SQL 脚本是否包含完整数据(INSERT 语句)而非仅有查询语句(SELECT),SELECT 不会被解析;第二,多张表的 SQL 脚本建议开启「多表分别输出」以保留表结构信息;第三,处理含中文的 SQL 时,CSV 输出建议开启「包含 BOM」确保 Excel 正确识别编码;第四,处理大型 SQL dump 时建议关闭「美化输出」以减少输出体积;第五,跨数据库迁移时可使用「SQL 重建」模式切换方言,但复杂类型(如 PostgreSQL 数组、JSONB)可能需要手动调整。