Преобразование 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"), что удобно для корректной обработки downstream-программами.
Различия в стиле кавычек между диалектами баз данных — распространенная ловушка при разборе 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-скрипт содержит пользовательские конфиденциальные данные, коммерческую тайну или структуру внутренней базы данных, они не утекут наружу. Этот дизайн особенно подходит для обработки экспорта производственных баз данных, без беспокойства о вопросах compliance данных. В то же время фронтенд-обработка не имеет сетевых задержек, скорость преобразования ограничена только CPU и памятью устройства.
По сравнению с традиционными инструментами командной строки для преобразования SQL (такими как sql2csv, sqlparser) этот инструмент имеет несколько преимуществ: не требует установки и настройки среды, откройте веб-страницу и используйте; предоставляет визуальный интерфейс для предварительного просмотра результата в реальном времени; поддерживает переключение между несколькими форматами вывода в один клик; встроенные образцы данных и документация; адаптивный мобильный дизайн для использования в любом месте. Однако инструмент сосредоточен на извлечении данных и не обрабатывает сложные диалектные различия SQL (например, операторы JSONB PostgreSQL, ON DUPLICATE KEY UPDATE MySQL) и расширенные функции (хранимые процедуры, функции, триггеры); при наличии таких потребностей рекомендуется использовать нативные инструменты баз данных или специализированные ETL-платформы.
При использовании инструмента преобразования SQL стоит учитывать несколько лучших практик: во-первых, перед преобразованием проверьте, содержит ли SQL-скрипт полные данные (INSERT-инструкции), а не только запросы (SELECT), которые не разбираются; во-вторых, для SQL-скриптов с несколькими таблицами рекомендуется включить «Раздельный вывод нескольких таблиц» для сохранения информации о структуре таблиц; в-третьих, при обработке SQL, содержащего китайские символы, для вывода CSV рекомендуется включить «Включить BOM», чтобы гарантировать корректное распознавание кодировки Excel; в-четвертых, при обработке больших SQL dump рекомендуется отключить «Красивый вывод» для уменьшения размера вывода; в-пятых, при кросс-базовой миграции можно использовать режим «Восстановление SQL» для переключения диалекта, но сложные типы (например, массивы PostgreSQL, JSONB) могут потребовать ручной корректировки.