SQL 格式化
把 SQL 粘贴进来,DevKitLab 会按所选方言重新缩进、对齐子句、规范关键字、函数与数据类型大小写,并在底部状态栏标出解析错误的行列位置。支持 MySQL、PostgreSQL、SQLite、BigQuery、Snowflake、Redshift、Oracle PL/SQL、SQL Server 等 20 种方言;可以切换缩进宽度、布尔运算换行方向、语句间空行、运算符紧凑程度和分号位置,也可以一键压缩为单行、复制、上传文件、下载、读取示例。所有处理在浏览器本地完成,查询语句不会上传到服务器。
功能简介
这个 SQL 工具按所选方言重新格式化语句,处理子句缩进、关键字大小写、布尔运算换行、语句间空行、运算符间距,以及压缩为单行的紧凑模式,更适合查询调试、SQL review、迁移整理和 ORM 参数检查。
- 01
多方言整形
内置 20 种方言:MySQL、MariaDB、TiDB、SingleStore、PostgreSQL、Redshift、SQLite、DuckDB、BigQuery、Snowflake、Oracle PL/SQL、SQL Server (Transact-SQL)、Spark、Trino、Hive、ClickHouse、Couchbase N1QL、IBM Db2、IBM Db2 for i,以及通用标准 SQL。
- 02
关键字、函数与数据类型大小写
关键字以及常见函数名、数据类型可以选择保持原样、统一大写或统一小写。表名和列名始终保持原始写法,因为部分数据库会把标识符的大小写当作有效信息。
- 03
缩进宽度与语句间距
可在 2 空格、4 空格、制表符之间切换,并控制多条语句之间的空行数量。整理迁移脚本、初始化脚本或测试 fixture 时,可以在紧凑和分明之间取舍。
- 04
AND / OR 换行位置
逻辑运算符可以选择换行在前(每行以 AND / OR 开头)或换行在后(保留在上一行末尾),方便对齐团队的 SQL 风格指南。
- 05
运算符间距与分号位置
打开运算符紧凑后,算术和比较运算符两侧的空格会被去掉;分号也可以单独占一行,让每条语句的结束位置一眼可见。减号后面跟负数时会保留一个空格,否则两个减号连在一起会被当成注释开头。
- 06
紧凑模式
复制压缩版会把语句压成一行,适合粘贴到 ORM 调用、日志字段或命令行。引号内的字符串和标识符按原样逐字保留,行注释会改写成块注释,不会把后面的语句一起注释掉。
- 07
错误定位
解析失败时,状态栏会显示具体行列位置和错误描述,点击即可把光标跳到出错处,帮助你定位漏掉的括号、多余的 token 或当前方言不认识的语法。
- 08
文件上传与下载
可以把 .sql / .txt 文件直接拖进编辑器,也可以点上传文件选择;编辑器里当前的内容能下载为 .sql 文件,便于和迁移工具或版本控制工作流配合。
- 09
刷新后设置还在
方言、大小写、缩进和显示选项会连同编辑器里的语句一起保存在本机浏览器里,下次回到这个页面不用重新配置一遍。
- 10
完全本地处理
解析、格式化、压缩、上传读取和下载都在浏览器本地完成。查询语句、库名、表名、字段名和示例数据不会发送到服务器。
如何使用
常见流程是:选好方言,粘贴 SQL,按需要调整大小写、缩进和换行选项,再复制格式化版或压缩版。
- 01
在底部选择目标方言,例如 MySQL、PostgreSQL、SQLite 或 BigQuery。方言只影响关键字识别,不会改写语义。
- 02
把 SELECT、JOIN、UPDATE、INSERT、迁移脚本或 ORM 生成的 SQL 粘贴进编辑器;也可以把本地 .sql 文件拖进来,或点上传文件选择。
- 03
调整关键字大小写、缩进宽度、语句间空行、运算符紧凑程度和分号位置,让输出贴近团队约定。
- 04
如果团队习惯每行以 AND / OR 开头,把布尔运算符换行位置切到换行在前,否则保持换行在后。
- 05
检查编辑器中的格式化结果。若解析失败,看底部状态栏的行列位置和错误描述,回到原始 SQL 修复语法。
- 06
需要紧凑结果时点击复制压缩版;需要可读结果时点击复制格式化版,或点击下载保存为 .sql 文件。
- 07
如果要进一步微调,直接在编辑器里修改 SQL,状态栏会跟着更新;改完点格式化或按 Shift+Alt+F,就按当前选项重新排版。
功能说明
这些功能覆盖了日常处理 SQL 时最常见的几类问题:风格不统一、方言关键字差异、需要紧凑或可读两种形态、需要定位解析错误、需要安全地处理生产 SQL。
- 覆盖 20 种方言,从 MySQL、PostgreSQL 到 BigQuery、Snowflake、Trino 和 IBM Db2,各自按本方言的关键字集合整形。
- 关键字、函数名和数据类型大小写可调整,表名和列名保持原始文本。
- 缩进宽度支持 2 空格、4 空格或制表符,并可控制语句间空行、运算符紧凑程度和分号位置。
- AND / OR 等布尔运算符可以换行在前或换行在后,匹配团队规范。
- 可以一键复制格式化版用于阅读,或复制压缩版用于代码、日志和 CLI,压缩时字符串和注释都会原样保留。
- 语句间空行可调,迁移脚本和初始化脚本看起来更整洁。
- 把 .sql 文件拖进来或上传后会自动按当前选项格式化;不合法语法会在状态栏标出错误位置。
- 可以把编辑器里当前的内容下载为 .sql 文件,格式化版或压缩版都行,方便提交到版本库或交给数据库工具执行。
- 选好的方言和格式化选项会记在本机浏览器里,下次打开还是上次的配置。
- 所有处理都在浏览器本地完成,不会把查询、表名、库名或样本数据上传。
适合哪些场景
这个页面适合所有需要把 SQL 改得更可读、更统一、更便于 review 或更适合粘贴到其他系统的场景。
-
查询调试
把 ORM 打印出来的单行 SQL 或调试日志里的拼接语句粘贴进来,格式化后逐句检查 JOIN、子查询和 WHERE 条件。
-
SQL review
整理 Pull Request 中的 SQL 片段,把团队的关键字大小写、缩进宽度和换行风格统一起来,让 review 时更容易聚焦逻辑。
-
迁移与初始化脚本整理
把 Flyway、Liquibase、Knex、Prisma、SQLAlchemy Alembic 等迁移脚本里的 DDL 与 DML 重新整理,按需要保留语句间空行。
-
BI 与报表查询
清理 Metabase、Superset、Looker、Redash 中的报表 SQL,确保 SELECT、GROUP BY、ORDER BY 的层级一目了然。
-
存储过程与脚本归档
整理 PL/SQL、T-SQL 或 PostgreSQL 函数定义中的语句体,便于提交到代码仓库或文档系统。
-
面试题与教学示例
准备 SQL 练习题、答案和讲义时,把示例查询整理成统一风格,方便课件、博客或 README 中展示。
-
AI Copilot 输出整理
把 AI 助手生成的长 SQL 重新格式化,确保缩进、大小写和关键字位置稳定,再粘贴到查询编辑器中验证。
-
日志 SQL 提取
从应用日志或慢查询日志中复制出的 SQL 通常是单行,先用这里展开成可读版本,再决定要不要进一步调优。
关于 SQL 格式化的几点提醒
格式化只改变可读性,不改变查询语义。下面这些点最容易在跨方言、跨团队时引起误解。
-
格式化不改写语义
工具只调整空白、换行、缩进和关键字大小写,不会改变表名、字段名、运算符和参数。同一条 SQL 在格式化前后执行结果应当一致。
-
方言只影响关键字识别
选择 PostgreSQL 还是 MySQL 主要影响哪些词被视为关键字、如何处理引号和函数名。它不会把 MySQL 语法翻译成 PostgreSQL 语法。
-
关键字大小写是风格,不是要求
大多数数据库不区分 SQL 关键字大小写,但团队通常会约定统一风格。把关键字统一为大写有助于在密集代码中区分关键字和标识符。
-
标识符大小写要小心
部分数据库对带引号的标识符区分大小写(如 PostgreSQL)。如果你手动修改表名或列名大小写,请确认目标数据库的行为,必要时保留原样。
-
不替代 SQL 解析器或 lint
工具基于词法格式化,不做语义校验。是否存在不存在的表、字段类型是否匹配、是否触发慢查询,需要由数据库、ORM 或专门的 SQL lint 工具检查。
-
不会执行 SQL
这里只对文本进行排版,不连接任何数据库,也不会发送查询。哪怕粘贴的是 DROP、DELETE,工具也只是对文本做格式化。
使用建议
SQL 越长、子查询和 CTE 越多,越需要稳定的格式化习惯。下面这些做法能减少 review 噪音和误解。
- 团队内统一一种方言、关键字大小写和缩进风格,避免每次 review 都讨论格式问题。
- 复杂 SELECT 先用稳定缩进展开层级,简单的迁移脚本可以保持较少语句间空行。
- 存储过程、长 CTE 和多层子查询适合 4 空格缩进,能看清嵌套关系。
- 调试 ORM 时,先用工具展开成多行,再判断是否需要新增索引、调整 JOIN 顺序或重写子查询。
- 需要嵌入到代码、日志或 CLI 时用压缩版,别自己手动删换行,手动处理最容易把字符串字面量里的空格一起删掉。
- 迁移脚本可以保留语句间空行,让每条 DDL / DML 都有视觉缓冲,review 时更容易分块。
- 处理生产 SQL 前先脱敏。工具本身不上传数据,但你复制出去的内容可能会进入工单、聊天、文档或截图。
边界与注意事项
这个工具负责 SQL 的排版、缩进和关键字风格,不替代查询解析器、SQL lint、迁移工具或执行引擎。
- 它不会校验表名、字段名、类型或权限是否真实存在,这些仍然需要数据库本身、DBA 工具或 ORM 的校验能力。
- 它不会改写查询语义。重写 JOIN 顺序、合并子查询、增删字段、加索引、改方言语法,需要交给数据库专家或重构工具。
- 它不是 SQL lint。复杂规则、命名约定和反模式检测请使用 sqlfluff、SonarQube、pgFormatter 等专门工具。
- 它不连接数据库,也不会执行任何 SQL。哪怕粘贴的是 DROP、DELETE 也只是格式化文本。
- 它不会自动在 MySQL 与 PostgreSQL 之间翻译方言差异,例如函数名、引号、limit/offset 语法。方言选择只影响格式化时的关键字识别。
- 所有处理在本地完成,但本地安全仍取决于你的设备、浏览器扩展、屏幕共享和复制目标。
- 编辑器里的内容会保存在本机浏览器里,刷新后还能恢复。在公用或共享设备上用完记得点清空。
常见问题
这里整理了关于方言、大小写、缩进、压缩、错误定位、隐私等常见问题。
我的 SQL 会上传到服务器吗?
不会。解析、格式化、压缩、上传文件读取、复制和下载都在浏览器标签页内完成。DevKitLab 不会把你的查询语句或表结构发送到服务器。
支持哪些 SQL 方言?
共 20 种:MySQL、MariaDB、TiDB、SingleStore、PostgreSQL、Redshift、SQLite、DuckDB、BigQuery、Snowflake、Oracle PL/SQL、SQL Server (Transact-SQL)、Spark、Trino、Hive、ClickHouse、Couchbase N1QL、IBM Db2、IBM Db2 for i,以及通用标准 SQL。
方言选错会怎么样?
方言主要影响哪些词被识别为关键字、字符串和引号风格。一般不会让 SQL 不可读,但少数方言专属语法(例如 BigQuery 的反引号、Postgres 的 dollar-quoted 字符串)在错配方言下可能格式化得不理想,建议匹配实际数据库选择。
为什么我的关键字没有自动大写?
默认大小写策略是保持原样,工具不会主动改写。把关键字切换成大写或小写,编辑器会立刻按新设置重新排版,来回切换也不会丢掉原始文本。
会修改我的字符串字面量吗?
不会。格式化和压缩都只处理 token 之间的空白,以及关键字、函数名和数据类型的大小写。引号内的字符串、带引号的标识符和参数占位符会原样保留,里面的空格也不会变。注释同样保留,唯一的改写是压缩时把行注释换成块注释,免得它把后面的语句一起注释掉。
压缩模式做了什么?
它把语句压成一行,去掉 token 之间的空白,适合 ORM 调用、日志字段、命令行或只接受单行查询的接口。引号内的内容不会被动,行注释会改写成块注释,后面的语句不会被注释掉。如果字符串字面量本身就含换行,那一行会被保留,结果自然不止一行。
解析失败说明 SQL 有问题吗?
通常说明工具的解析器遇到了无法识别的 token,例如方言不匹配、括号不闭合或某些非常规扩展语法。它不等同于数据库的执行错误;可以更换方言、修正语法后再试。
可以处理 PL/SQL 或 T-SQL 的存储过程吗?
可以处理大部分常见的 PL/SQL 与 T-SQL 语句体,但 sql-formatter 并不支持完整的存储过程语义。复杂存储过程建议交给数据库自带的 IDE 或专用工具。
能直接在这里执行 SQL 或连接数据库吗?
不能。这个工具只对 SQL 文本进行排版,不连接任何数据库,也不会发送或执行查询。
能处理很大的 SQL 文件吗?
几百 KB 到几 MB 的脚本通常没问题。上传文件的上限是 5 MB,因为再大的文件读取加格式化会让标签页卡住很久;即使没超过上限,几 MB 的批量 INSERT 也会明显变慢。建议先把大迁移脚本拆成小文件。
更多相关工具
可以继续在数据工具集合里完成查询和数据相关工作流:整理返回的 JSON、查看表格数据,或在多个工具之间快速切换。