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)可能需要手動調整。