Форматировщик SQL

0 символов

Инструмент форматирования SQL GeekFormat, быстрое улучшение читаемости и организация неструктурированных SQL-запросов. Поддерживает 20 диалектов баз данных, таких как MySQL, PostgreSQL, SQLite, SQL Server, Oracle и др., настраиваемые параметры форматирования: регистр ключевых слов, стиль отступов, позиция переноса строк операторов, ширина выражений, 4 предустановленных стиля одним кликом. Включает функции сжатия SQL и проверки синтаксиса, поддержка загрузки/скачивания файлов, обмена через URL, горячих клавиш, обеспечивает подсветку синтаксиса и настраиваемый макет панели на основе редактора CodeMirror 6. Автоматическое форматирование в реальном времени после ввода, полностью локальная обработка в браузере, SQL-запросы не отправляются на сервер.

Похожие

О форматировании SQL

Форматирование SQL (SQL Formatting / SQL Beautification) — это настройка пробельных символов (переносов строк, отступов, пробелов) и регистра ключевых слов в SQL-операторах с помощью автоматизированных инструментов, чтобы они имели согласованную, хорошо читаемую структуру разметки. Как декларативный язык запросов, сложный запрос часто включает несколько конструкций, таких как JOIN нескольких таблиц, вложенные подзапросы, несколько условий WHERE, группировка GROUP BY, фильтрация HAVING, сортировка ORDER BY и т.д., без форматирования все содержимое сжимается в одну строку или имеет запутанные отступы, что серьезно влияет на читаемость и эффективность обслуживания. Отформатированный SQL размещает каждую конструкцию на отдельной строке с помощью соответствующих переносов и отступов, иерархия вложенности выражается отступами, позволяя читателю быстро понять структуру запроса.

Почему форматирование SQL важно? В среде совместной работы команды разные разработчики имеют разные предпочтения в стиле кодирования — кто-то любит ключевые слова в верхнем регистре, кто-то в нижнем; кто-то использует отступы 2 пробела, кто-то 4 пробела или Tab; кто-то размещает AND в начале строки, кто-то в конце. Эти различия в стилях сами по себе не влияют на выполнение SQL, но при проверке кода (Code Review) создают множество бессмысленных diff, ревьюеру нужно различать, какие из них являются реальными логическими изменениями, а какие — только корректировкой форматирования. Унифицированные правила форматирования SQL и автоматизированные инструменты форматирования могут устранить споры о стиле, позволяя команде сосредоточиться на самой бизнес-логике.

Основные правила форматирования SQL обычно включают следующие аспекты: во-первых, регистр ключевых слов — зарезервированные слова SQL, такие как SELECT, FROM, WHERE, JOIN, ON, GROUP BY, ORDER BY, HAVING, LIMIT, INSERT, UPDATE, DELETE, CREATE, ALTER, DROP, обычно пишутся в верхнем регистре для отличия от идентификаторов (или в нижнем регистре унифицированно в соответствии с правилами команды); во-вторых, перенос строк конструкций — каждая основная конструкция (SELECT/FROM/WHERE/GROUP BY/ORDER BY и т.д.) на отдельной строке; в-третьих, выравнивание имен столбцов — несколько имен столбцов в списке SELECT занимают по одной строке и выравниваются по вертикали; в-четвертых, уровни отступов — подзапросы, условия JOIN, вложенные выражения CASE и т.д. отражают иерархию дополнительными отступами; в-пятых, позиция операторов — логические операторы, такие как AND/OR, унифицированно размещаются в начале или конце строки.

Форматирование SQL разных диалектов баз данных имеет свои особенности. MySQL использует обратные кавычки (`) для кавычек идентификаторов, PostgreSQL использует двойные кавычки ("), SQL Server использует квадратные скобки ([]); MySQL использует LIMIT для пагинации, PostgreSQL поддерживает LIMIT/OFFSET, SQL Server использует TOP или OFFSET/FETCH, Oracle использует ROWNUM; PostgreSQL имеет оператор преобразования типа ::, MySQL имеет экранирование обратными кавычками, SQL Server имеет идентификаторы в квадратных скобках. Эти диалектные различия требуют, чтобы форматер мог распознавать синтаксические элементы, специфичные для конкретных баз данных, в противном случае он может ошибочно принимать специальный синтаксис за ошибки или неправильно разбивать ключевые слова. Этот инструмент реализован на основе библиотеки sql-formatter и обеспечивает специализированную синтаксическую поддержку для 20 основных диалектов SQL.

Сжатие SQL (SQL Minification) — это операция, обратная форматированию, и оно очень полезно в определенных сценариях. SQL, выводимый в логи приложений, SQL, генерируемый фреймворками ORM (такими как Hibernate, MyBatis, Django ORM, SQLAlchemy), SQL, захваченный инструментами мониторинга производительности баз данных, часто имеет сжатый однострочный формат без переносов строк, что очень неудобно для устранения неполадок — нужно сначала отформатировать для чтения. И наоборот, когда нужно встроить SQL в строки кода (например, конкатенацию строк в Java/Python/JavaScript), записать в файлы конфигурации, передать через параметры URL или поделиться в инструментах чата, не поддерживающих многострочный текст, сжатие в одну строку позволяет избежать проблем с форматированием, вызванных переносами строк и отступами.

Выбор подходящего стиля форматирования требует учета правил команды и сценариев использования. Стиль с ключевыми словами в верхнем регистре — это традиционная конвенция SQL, в эпоху печати ключевые слова в верхнем регистре делали написанный от руки или на пишущей машинке SQL более читаемым, сегодня он все еще используется многими командами и организациями. Стиль с ключевыми словами в нижнем регистре становится все более популярным на современных платформах кода, таких как GitHub, потому что нижний регистр визуально мягче, а с подсветкой синтаксиса современных редакторов больше не нужно различать ключевые слова по регистру. Отступы 2 пробела более распространены среди frontend-разработчиков, 4 пробела — среди backend-разработчиков Java/C#. Отступы Tab позволяют разным разработчикам настраивать ширину отображения в редакторе. Размещение логических операторов AND/OR в начале строки облегчает сканирование каждого условия при чтении длинных списков условий; размещение в конце строки больше соответствует привычкам чтения на английском языке.

Принцип реализации инструментов форматирования SQL в основном основан на лексическом анализе (Tokenization) и синтаксическом анализе. Библиотеки, такие как sql-formatter, сначала разбивают строку SQL на ряд токенов (ключевые слова, идентификаторы, литералы, операторы, знаки препинания, комментарии и т.д.), затем переупорядочивают эти токены в соответствии с синтаксическими правилами (разные диалекты имеют разные наборы правил), вставляя переносы строк и отступы в соответствующих местах. В отличие от универсальных форматеров кода (таких как Prettier), форматеры SQL должны понимать специфическую синтаксическую структуру SQL (например, условия JOIN...ON, выражения CASE WHEN...END, вложенность скобок подзапросов) для правильного отступа, а не только полагаться на фигурные скобки или соответствие скобок.

При использовании инструментов форматирования SQL обратите внимание на следующие моменты: во-первых, форматирование не проверяет семантическую правильность SQL — синтаксически правильный, но логически ошибочный SQL (например, неправильно написанное условие JOIN, пропущенное условие WHERE) останется ошибочным после форматирования, форматирование только улучшает разметку, не улучшает логику; во-вторых, в редких крайних случаях инструмент форматирования может генерировать результаты, отличающиеся от исходного SQL в чувствительных к пробелам сценариях (например, пробелы в строковых константах, определенные позиции комментариев), рекомендуется выполнить простую проверку после форматирования; в-третьих, не выполняйте напрямую в производственной среде SQL, сгенерированный инструментом форматирования, без тестирования, особенно SQL с динамическими параметрами; в-четвертых, для SQL, содержащего конфиденциальные данные (пароли, ключи, PII), используйте локальные инструменты форматирования (как этот инструмент) вместо онлайн-инструментов, чтобы избежать риска утечки данных.

Варианты использования

  • Организация больших блоков хранимых процедур SQL и сложных запросов с объединением таблиц без форматирования при接手 старых проектов для быстрого понимания бизнес-логики
  • Унификация стиля SQL перед проверкой кода команды, устранение шума diff, вызванного личными предпочтениями форматирования, фокус на логической проверке
  • Сжатый однострочный SQL, скопированный из логов или консоли, форматирование для удобства чтения и устранения проблем
  • При написании технических документов и блогов встраивание отформатированных примеров SQL в документ для повышения профессионализма и читаемости
  • Когда SQL, экспортированный из клиентов баз данных, имеет запутанное форматирование, переформатирование в унифицированный стиль команды перед отправкой кода
  • При подготовке к собеседованиям или техническим презентациям форматирование демонстрационных SQL-операторов для использования в слайдах и объяснениях на доске
  • При устранении ошибок SQL форматирование запутанных вложенных подзапросов для определения структурных проблем, таких как несоответствие скобок и отсутствие ключевых слов
  • Логи SQL, генерируемые фреймворками ORM, обычно имеют сжатый формат без переносов строк, форматирование для удобства анализа фактически выполняемого запроса
  • При разработке скриптов миграции данных форматирование операторов создания таблицы и INSERT для повышения поддерживаемости
  • Унификация форматирования перед сравнением различий между версиями SQL, предотвращение влияния чисто формальных различий на проверку кода
  • При изучении SQL форматирование примеров запросов для понимания иерархии JOIN, подзапросов и GROUP BY через четкие отступы и переносы строк
  • При обмене фрагментами SQL с коллегами сначала форматирование, а затем обмен через ссылку URL, получатель откроет и увидит тот же отформатированный результат

Как использовать

  1. Выберите диалект базы данных (по умолчанию MySQL, поддерживает 20 диалектов SQL) для обеспечения правильного распознавания синтаксиса форматером
  2. Вставьте SQL-операторы, которые нужно отформатировать, в левую область редактирования, или нажмите кнопку загрузки для импорта файлов .sql/.txt, также можно загрузить пример SQL из меню примеров
  3. Нажмите кнопку форматирования (Shift+Cmd/Ctrl+F) или дождитесь автоматического форматирования (запускается автоматически через 800 мс после ввода), отформатированный результат немедленно отображается справа
  4. Если нужно настроить форматирование, нажмите кнопку настроек для разворачивания панели конфигурации, настройте параметры, такие как регистр ключевых слов, отступы, переносы строк, или выберите предустановленный стиль; если нужно однострочное сжатие, нажмите кнопку сжатия
  5. Нажмите кнопку копирования для копирования результата, или нажмите кнопку скачивания для сохранения как файла .sql, также можно нажать кнопку обмена для генерации ссылки URL, содержащей содержимое SQL

Функции

  • Совместимость с 20 диалектами баз данных: поддержка распознавания синтаксиса и форматирования для 20 диалектов SQL, включая стандартный SQL, MySQL, MariaDB, TiDB, PostgreSQL, SQLite, BigQuery, Snowflake, Redshift, DB2, PL/SQL(Oracle), T-SQL(SQL Server), Spark SQL, Hive, Trino, ClickHouse, DuckDB и др.
  • Управление регистром ключевых слов: поддержка трех режимов для ключевых слов, таких как SELECT/FROM/WHERE/JOIN: верхний регистр (UPPER), нижний регистр (lower) или сохранение исходного (preserve), с отдельной настройкой для типов данных и имен функций
  • Управление регистром идентификаторов: идентификаторы, такие как имена таблиц, столбцов и псевдонимов, поддерживают верхний регистр, нижний регистр или сохранение исходного, адаптируясь к различным стандартам кодирования команды
  • Выбираемый стиль отступов: поддержка трех стилей отступов: стандартные отступы, табличное выравнивание по левому краю (tabularLeft) и табличное выравнивание по правому краю (tabularRight), удовлетворяя различным предпочтениям чтения
  • Гибкая настройка отступов: ширина отступов может быть 2 пробела, 4 пробела или символ Tab; количество пустых строк между запросами может быть 0/1/2 строки
  • Перенос строк логических операторов: настройка, переносить ли логические операторы, такие как AND/OR, до (before) или после (after) оператора, в соответствии со стилем кода команды
  • Управление шириной выражений: порог символов для переноса строки выражений настраивается (20-200 символов), автоматический перенос при превышении ширины, контроль длины отдельной строки
  • Режим плотных операторов: при включении вокруг операторов не остается дополнительных пробелов, создается более компактный результат форматирования, подходит для встроенных сценариев SQL
  • Перенос строк перед точкой с запятой: опциональный перенос строк перед точкой с запятой в конце оператора, размещение точки с запятой на отдельной строке для быстрого определения границ оператора
  • 4 предустановленных стиля: переключение одним кликом между стилем по умолчанию (ключевые слова UPPER + отступы 2 пробела), строчным (все ключевые слова в нижнем регистре), компактным (табличное выравнивание + плотные операторы) и свободным (отступы 4 пробела + двойные пустые строки), без необходимости настраивать каждый элемент
  • Функция сжатия SQL: сжатие SQL в одну строку одним кликом, автоматическое удаление комментариев, лишних пробелов и переносов строк, подходит для вывода логов, конкатенации кода и сценариев встраивания в документы
  • Функция проверки синтаксиса: базовая проверка синтаксиса SQL, отображение сообщений об ошибках при неудачном форматировании для помощи в определении проблем синтаксиса
  • Встроенные примеры SQL: предоставление четырех групп примеров SQL: базовый запрос, сложный запрос с объединением таблиц, пакетная обработка нескольких операторов и оператор создания таблицы CREATE TABLE, для быстрого ознакомления с эффектом форматирования
  • Загрузка/скачивание файлов: поддержка загрузки файлов .sql/.txt для прямого импорта SQL, после форматирования можно скачать как файл .sql для сохранения
  • Обмен через URL: использование сжатия LZ-String для кодирования SQL в хэше URL, копирование ссылки для обмена конфигурацией форматирования и содержимым SQL
  • Автоматическое форматирование в реальном времени: автоматическое форматирование с задержкой debounce 800 мс после ввода SQL, немедленный просмотр эффекта при изменении, без необходимости повторного нажатия кнопки
  • Горячие клавиши: Shift+Cmd/Ctrl+F форматирование, Shift+Cmd/Ctrl+C сжатие, Shift+Cmd/Ctrl+V проверка, Shift+Cmd/Ctrl+O загрузка, Shift+Cmd/Ctrl+D скачивание, Shift+Cmd/Ctrl+K очистка
  • Редактор CodeMirror: редактор с подсветкой синтаксиса SQL на основе CodeMirror 6, поддержка настройки ширины левой/правой панели перетаскиванием, настройки размера шрифта и панели истории
  • Копирование результата одним кликом: отформатированный или сжатый SQL можно скопировать в буфер обмена одним кликом для прямой вставки в клиенты баз данных или код
  • Полностью локальная обработка в браузере: все форматирование SQL выполняется в JavaScript в браузере на основе библиотеки sql-formatter, SQL-запросы не отправляются на никакие серверы, безопасность данных гарантирована

Часто задаваемые вопросы

Изменяет ли форматирование SQL логику запроса? Можно ли напрямую выполнять отформатированный SQL?

Не изменяет логику запроса. Форматирование SQL только корректирует пробельные символы (переносы строк, отступы, пробелы) и регистр ключевых слов, не изменяет идентификаторы, значения, операторы, вызовы функций и структуру запроса в SQL. Отформатированный SQL семантически полностью эквивалентен исходному SQL, его можно напрямую копировать в клиенты баз данных, такие как MySQL Workbench, pgAdmin, DBeaver, Navicat для выполнения. Однако рекомендуется проверить в тестовой среде перед выполнением в производственной среде.

Какие диалекты баз данных поддерживаются? Что делать при различиях в синтаксисе SQL между разными базами данных?

Поддерживается 20 диалектов SQL: стандартный SQL, MySQL, MariaDB, TiDB, PostgreSQL, SQLite, BigQuery, Snowflake, Redshift, DB2, DB2i, PL/SQL(Oracle), T-SQL(SQL Server), Spark SQL, Hive, Trino, ClickHouse, SingleStoreDB, DuckDB, N1QL(Couchbase). Разные базы данных имеют различия в синтаксисе пагинации (LIMIT vs LIMIT/OFFSET vs TOP vs ROWNUM), конкатенации строк, функциях даты, кавычках для идентификаторов (обратные кавычки vs двойные кавычки vs квадратные скобки) и т.д. Выбор правильного диалекта гарантирует, что форматер правильно распознает ключевые слова и имена функций, избегая неправильного форматирования специфичных для диалекта функций.

Что такое сжатие SQL? В чем разница между сжатием и форматированием?

Сжатие SQL (Minify) — это операция, обратная форматированию: удаляются все комментарии (включая многострочные комментарии /* */ и однострочные комментарии --), последовательные пробельные символы объединяются в один пробел, удаляются лишние пробелы вокруг скобок/запятых/точек с запятой/операторов, выводится компактный однострочный SQL. Сжатие подходит для следующих сценариев: встраивание SQL в строки кода, запись в файлы логов, передача через параметры URL, обмен в окнах чата для избежания искажений переносов строк. Форматирование, напротив, добавляет соответствующие переносы строк и отступы для улучшения читаемости.

Когда запускается автоматическое форматирование? Можно ли его отключить?

После ввода или изменения SQL в левой области редактирования форматирование автоматически запускается после задержки debounce 800 мс (при условии, что предыдущее форматирование не имело ошибок синтаксиса). Это сделано для немедленного отображения отформатированного эффекта после того, как вы перестанете печатать. Если вы предпочитаете ручное управление, просто нажмите кнопку форматирования на панели инструментов, не дожидаясь автоматического запуска. В настоящее время нет отдельного переключателя для отключения автоматического форматирования, но оно не запускается повторно, пока содержимое ввода не будет изменено.

Что делать, если форматирование не удалось и указывает на ошибку синтаксиса?

Форматер сообщает об ошибке, когда встречает синтаксис SQL, который не может проанализировать, распространенные причины включают: 1) Несоответствие скобок — проверьте, совпадает ли количество левых и правых скобок; 2) Незакрытая строка — проверьте, парные ли одинарные/двойные кавычки; 3) Ошибка в написании ключевых слов — такие как опечатки как SELCT, WHRER и т.д.; 4) Несоответствие диалекта базы данных — например, использование синтаксиса преобразования типа ::, специфичного для PostgreSQL, но выбран диалект MySQL; 5) Неполный фрагмент SQL — например, только условие WHERE без SELECT FROM. Сообщение об ошибке отображает позицию и причину проблемы, сообщенную анализатором, вы можете определить проблему на основе этого. Также можно сначала нажать кнопку проверки (Shift+Cmd/Ctrl+V) для проверки синтаксиса.

Как выбрать между тремя режимами: ключевые слова в верхнем регистре, нижнем регистре или сохранение исходного?

Ключевые слова в верхнем регистре (UPPER) — это самый традиционный и популярный стиль кодирования SQL, ключевые слова, такие как SELECT/FROM/WHERE/JOIN, в верхнем регистре визуально отличают их от имен таблиц/столбцов, позволяя быстро определять структуру SQL в больших объемах кода. Ключевые слова в нижнем регистре больше подходят для современных сред IDE (современные редакторы имеют подсветку синтаксиса, больше не полагаются на различие по регистру), визуально более единообразны. Сохранение исходного (preserve) не изменяет регистр, который вы ввели, подходит для внесения минимальных изменений форматирования в существующий код. Ключевые слова, идентификаторы (имена таблиц и столбцов), типы данных (VARCHAR/INT/BIGINT) и имена функций (COUNT/SUM/COALESCE) могут иметь независимые стратегии регистра.

В чем разница между режимом табличного выравнивания и стандартными отступами?

Стандартные отступы (standard) используют традиционный метод иерархических отступов, каждая конструкция indentуется фиксированным количеством пробелов. Режимы табличного выравнивания по левому/правому краю выравнивают имена столбцов в списке SELECT, выражения в условиях WHERE и т.д. по столбцам, создавая визуальный эффект, похожий на таблицу. Например, несколько имен столбцов после SELECT выравниваются по вертикали, псевдонимы AS также выравниваются в одной позиции столбца. Этот режим очень интуитивен при чтении многоколоночных запросов на широкоформатных мониторах, но на узких экранах может приводить к слишком длинным строкам.

Как быстро переключаться между унифицированным стилем SQL команды и личными предпочтениями?

Используйте предустановленные кнопки на панели настроек: по умолчанию (ключевые слова UPPER + стандартные отступы 2 пробела), строчный (все ключевые слова в нижнем регистре), компактный (выравнивание tabularLeft + плотные операторы), свободный (отступы 4 пробела + двойные пустые строки между запросами). Если у вашей команды есть определенные правила, вручную настройте параметры и отформатируйте. В настоящее время не поддерживается сохранение пользовательских предустановок, но количество параметров конфигурации ограничено, быстрая настройка также удобна.

Теряются ли комментарии в отформатированном SQL?

Операция форматирования (Format) сохраняет комментарии, однострочные комментарии -- и многострочные комментарии /* */ сохраняются рядом с исходной позицией (конкретная позиция зависит от логики обработки комментариев библиотеки sql-formatter). Но операция сжатия (Compress) удаляет все комментарии для создания наиболее компактного однострочного SQL, если нужно сохранить комментарии перед сжатием, сначала скопируйте отформатированный результат.

Какие горячие клавиши поддерживаются? В чем разница между Mac и Windows/Linux?

Поддерживаются следующие горячие клавиши (Mac использует клавишу Cmd, Windows/Linux используют клавишу Ctrl, оба требуют одновременного удержания Shift): Shift+Cmd/Ctrl+F форматирование; Shift+Cmd/Ctrl+C сжатие; Shift+Cmd/Ctrl+V проверка синтаксиса; Shift+Cmd/Ctrl+O загрузка файла; Shift+Cmd/Ctrl+D скачивание файла; Shift+Cmd/Ctrl+K очистка содержимого. Нажмите на значок вопросительного знака на панели инструментов, чтобы просмотреть список горячих клавиш в любое время.

Есть ли ограничение на размер загружаемых SQL-файлов? Какие форматы файлов поддерживаются?

Поддерживается загрузка текстовых файлов в форматах .sql и .txt, теоретически нет жесткого ограничения на размер файла, но браузер может иметь проблемы с производительностью при обработке очень больших файлов (например, файлов дампа SQL размером более 1 МБ). Рекомендуется обрабатывать отдельные запросы или небольшие скриптовые файлы. Для очень больших SQL-файлов (например, полных дампов баз данных) рекомендуется сначала разделить на более мелкие фрагменты перед форматированием. Содержимое файла читается через API FileReader браузера, не отправляется на сервер.

Безопасна ли функция обмена через URL? Видит ли сервер содержимое SQL?

Функция обмена через URL использует сжатие LZ-String для кодирования содержимого SQL в хэш-части URL (содержимое после #). Особенность хэш-части URL заключается в том, что она не отправляется на сервер с HTTP-запросами, обрабатывается только локально в браузере. Когда вы копируете ссылку для обмена другому человеку, браузер получателя анализирует хэш и распаковывает для отображения содержимого SQL, в течение всего процесса SQL не проходит через никакие серверы. Однако обратите внимание, что ссылка для обмена содержит полное содержимое SQL, если SQL содержит конфиденциальную информацию (например, пароли, ключи, персональные данные), не делитесь ссылкой в публичных каналах.

Можно ли форматировать скрипты, содержащие несколько SQL-операторов?

Да. Инструмент поддерживает пакетное форматирование нескольких SQL-операторов (например, нескольких операторов SELECT/INSERT/UPDATE/CREATE TABLE, разделенных точкой с запятой). Вы можете управлять интервалом между операторами (0/1/2 строки) через параметр «Количество пустых строк между запросами» на панели настроек. Загрузите пример SQL «Несколько операторов», чтобы ознакомиться с эффектом форматирования нескольких операторов. Каждый оператор независимо форматируется и размечается с отступами, операторы разделяются настроенным количеством пустых строк.

Какой размер SQL-операторов вызывает зависание?

Реализация чисто на JavaScript на основе библиотеки sql-formatter, обработка SQL до нескольких сотен строк обычно имеет отклик в миллисекундах в современных браузерах, без ощущения зависания. Даже хранимые процедуры на тысячи строк или сложные запросы могут быть завершены менее чем за 1 секунду. Все вычисления выполняются в главном потоке браузера, очень большие файлы (например, дампы SQL с более чем 10 000 строк) могут вызывать временное замораживание интерфейса, рекомендуется обрабатывать пакетами.

Требуется ли инструменту подключение к интернету для использования? Безопасны ли данные SQL?

Можно использовать в автономном режиме после загрузки страницы, форматирование, сжатие и проверка SQL полностью выполняются в локальном JavaScript в браузере, не отправляет введенные вами SQL-операторы на никакие внешние серверы. Не использует отслеживание через Cookie, не собирает содержимое SQL, введенное пользователем, или данные о поведении при использовании. Реализовано на основе зрелой open-source библиотеки sql-formatter, логика кода прозрачна и проверяема.

Устранение неполадок

Что делать, если форматирование сообщает об ошибке «Parse error» или «Сбой форматирования SQL»?

Форматер анализирует SQL на основе библиотеки sql-formatter, сообщает об ошибке при встрече нераспознанного синтаксиса. Распространенные причины и решения: 1) Несоответствие скобок — проверьте, совпадает ли количество левых и правых скобок, можно использовать функцию подсветки соответствия скобок редактора для помощи в проверке; 2) Незакрытые кавычки строки — проверьте, парные ли одинарные и двойные кавычки, кавычки внутри строк должны быть экранированы (например, '' или \'); 3) Неправильный выбор диалекта базы данных — например, использование оператора :: PostgreSQL, но выбран диалект MySQL, переключитесь на правильный диалект; 4) Неполный SQL-оператор — например, только предложение WHERE без SELECT FROM; 5) Использование очень специфического синтаксиса базы данных (например, определенных потоков управления хранимыми процедурами), попробуйте переключиться на ближайший диалект или упростите фрагмент SQL перед форматированием.

Китайские или специальные символы отображаются как нечитаемые после форматирования?

Этот инструмент полностью поддерживает кодировку UTF-8, китайские и Unicode-символы остаются неизменными в процессе форматирования. Если появляются нечитаемые символы, обычно это потому, что вставленный вами SQL взят из файла с неправильной кодировкой (например, скопирован из файла с кодировкой GBK). Убедитесь, что исходный файл сохранен с кодировкой UTF-8, или преобразуйте файл в кодировку UTF-8 перед вставкой. Редактор CodeMirror в браузере по умолчанию использует UTF-8, не вносит преобразований кодировки.

После загрузки SQL-файла нет реакции или отображается пустое содержимое?

Загрузка файлов поддерживает только текстовые файлы с расширениями .sql и .txt. Если файл в двоичном формате (например, файл базы данных .sqlite, документ .doc), после загрузки будут отображаться нечитаемые символы или пустое содержимое. Кроме того, некоторые браузеры имеют ограничения безопасности для чтения локальных файлов через JavaScript, убедитесь, что вы выбираете файл активным нажатием на кнопку загрузки, а не перетаскиванием (загрузка перетаскиванием в настоящее время не поддерживается). Рекомендуемый размер файла не более 1 МБ, превышение может привести к медленному анализу в браузере.

После форматирования некоторые ключевые слова стали строчными/прописными, несовместимыми с исходным вводом?

Это нормальное поведение форматирования. Параметр регистра ключевых слов (keywordCase) по умолчанию установлен на UPPER, он будет единообразно преобразовывать ключевые слова SQL в верхний регистр. Если вы хотите сохранить исходный регистр неизменным, измените параметры регистра ключевых слов, идентификаторов, типов данных и функций на панели настроек на «Сохранить исходное (preserve)», тогда форматер будет только корректировать переносы строк и отступы, не изменяя регистр ни одной буквы.

Глоссарий

Диалект SQL (SQL Dialect)
Расширения и варианты стандартного SQL различными системами управления базами данных (DBMS). Например, LIMIT в MySQL, преобразование типа :: в PostgreSQL, TOP в SQL Server, ROWNUM в Oracle и т.д. — это специфичные для диалекта синтаксисы. При форматировании необходимо выбрать правильный диалект для обеспечения корректного синтаксического анализа.
Регистр ключевых слов (Keyword Case)
Стратегия регистра для зарезервированных слов SQL (SELECT/FROM/WHERE/JOIN и т.д.). Верхний регистр (UPPER) — традиционный стиль, нижний регистр (lower) становится все более популярным в современной разработке, сохранение исходного (preserve) используется для минимальных изменений.
Идентификатор (Identifier)
Имена объектов базы данных в SQL, включая имена баз данных, таблиц, столбцов, псевдонимов, индексов, представлений, хранимых процедур и т.д. Разные базы данных используют разные способы кавычек для идентификаторов: MySQL использует обратные кавычки, PostgreSQL использует двойные кавычки, SQL Server использует квадратные скобки.
Стиль отступов (Indent Style)
Управляет способом выравнивания отступов при форматировании SQL. Стандартные отступы используют иерархическую прогрессию; tabularLeft/tabularRight выравнивают имена столбцов и псевдонимы в табличном формате, лучше читаемость на широком экране, но могут создавать более длинные строки.
Перенос строк логических операторов (Logical Operator Newline)
Позиция переноса строки логических операторов, таких как AND/OR, в многострочных условиях. before означает, что оператор находится в начале следующей строки, after означает, что оператор находится в конце текущей строки. Разные команды имеют разные предпочтения.
Ширина выражения (Expression Width)
Порог символов в строке, вызывающий перенос строки (20-200 символов). Выражения, превышающие эту ширину, будут перенесены, аналогично настройке printWidth/ruler в редакторах кода.
Плотные операторы (Dense Operators)
Одна из опций форматирования, при включении вокруг операторов (=, <, >, +, - и т.д.) не остается дополнительных пробелов, например `WHERE id=1 AND status='active'` вместо `WHERE id = 1 AND status = 'active'`, создает более компактный вывод.
Пустые строки между запросами (Lines Between Queries)
Количество пустых строк между несколькими SQL-операторами. 0 означает непосредственное расположение, 1 означает разделение одной пустой строкой (часто используемое), 2 означает две пустые строки (свободный стиль), влияет на читаемость скриптов с несколькими операторами.
Сжатие/минификация SQL (SQL Minify/Compress)
Удаление всех комментариев и лишних пробелов из отформатированного SQL, объединение в компактный однострочный формат. Подходит для сценариев, таких как вывод логов, встраивание кода, передача по URL и т.д., является операцией, обратной форматированию.
Красивая печать (Pretty Print)
Создание вывода кода или данных в хорошо читаемом формате с помощью автоматических отступов и переносов строк. SQL Pretty Print — это улучшение читаемости и форматирование SQL, противоположность Minify (сжатию).
CodeMirror
Компонент редактора кода в браузере, используемый этим инструментом (версия 6), предоставляет функции улучшения редактирования, такие как подсветка синтаксиса SQL, отображение номеров строк, сворачивание кода и т.д., является широко используемым в отрасли решением веб-редактора кода.
sql-formatter
Open-source библиотека форматирования SQL, используемая в ядре этого инструмента, поддерживает лексический анализ и форматированный вывод для различных диалектов SQL, является одной из самых популярных библиотек форматирования SQL в экосистеме frontend.

Список поддерживаемых диалектов SQL

Инструмент поддерживает 20 диалектов баз данных SQL, выберите диалект, соответствующий используемой вами базе данных, для получения наилучшего эффекта форматирования:

ДиалектБаза данныхОписание особенностей
Standard SQLСтандартный SQLСтандартный синтаксис ANSI SQL, подходит для общих сценариев и неизвестных диалектов
MySQLMySQL / TiDBСамая популярная открытая реляционная база данных, идентификаторы в обратных кавычках, пагинация LIMIT
MariaDBMariaDBВетвь MySQL, совместима с синтаксисом MySQL и расширена дополнительными функциями
PostgreSQLPostgreSQLМногофункциональная открытая база данных, идентификаторы в двойных кавычках, преобразование типа ::
SQLiteSQLiteВстраиваемая легковесная база данных, часто используется в мобильных приложениях и браузерах
T-SQLSQL Server / AzureTransact-SQL Microsoft SQL Server, идентификаторы в квадратных скобках, пагинация TOP
PL/SQLOracleПроцедурное расширение SQL от Oracle, пагинация ROWNUM, богатые встроенные пакеты
BigQueryGoogle BigQueryОблачное хранилище данных Google, поддерживает вложенные типы, такие как STRUCT/ARRAY
SnowflakeSnowflakeОблачное нативное хранилище данных, сильные возможности обработки полуструктурированных данных
RedshiftAWS RedshiftОблачное хранилище данных Amazon, основано на PostgreSQL, но имеет специфический синтаксис

Сравнение предустановленных стилей форматирования

4 предустановленных стиля одним кликом подходят для разных сценариев использования:

ПредустановкаКлючевые словаОтступыОператорыИнтервал между запросами
По умолчаниюUPPER2 пробела СтандартНормальные пробелы1 пустая строка
Строчныйlower2 пробела СтандартНормальные пробелы1 пустая строка
КомпактныйUPPERТабличное выравнивание слеваПлотный режим1 пустая строка
СвободныйUPPER4 пробела СтандартНормальные пробелы2 пустые строки

Обзор горячих клавиш

Все горячие клавиши требуют одновременного удержания модификатора+Shift+соответствующей буквы:

ДействиеMacWindows/LinuxОписание
Форматировать⇧⌘FShift+Ctrl+FУлучшает читаемость SQL-запросов, добавляет переносы строк и отступы
Сжать⇧⌘CShift+Ctrl+CСжимает SQL в одну строку, удаляет комментарии и пробелы
Проверить⇧⌘VShift+Ctrl+VПроверяет правильность синтаксиса SQL
Загрузить⇧⌘OShift+Ctrl+OЗагружает .sql/.txt из локального файла
Скачать⇧⌘DShift+Ctrl+DСохраняет результат как файл .sql
Очистить⇧⌘KShift+Ctrl+KОчищает содержимое ввода и вывода

Privacy & Security

Все операции этого инструмента форматирования SQL полностью выполняются локально в вашем браузере: введенные вами SQL-операторы, выбранный диалект и конфигурация форматирования обрабатываются в JavaScript браузера библиотекой sql-formatter, никакое содержимое SQL или конфигурация не отправляется по сети на внешние серверы. Загрузка файлов читает содержимое локальных файлов через API HTML5 FileReader, без передачи по сети. Функция обмена через URL сжимает SQL и кодирует его в хэш-части URL (содержимое после # не отправляется на сервер с HTTP-запросами), только локально распаковывает и отображает в браузере. Не использует отслеживание через Cookie, не собирает содержимое SQL, введенное пользователем, или данные о поведении при использовании. После закрытия или обновления страницы содержимое ввода и состояние конфигурации автоматически сбрасываются (история сохраняется только в локальном localStorage).

Authoritative References