# SQL 格式化与压缩

把 SQL 按子句分行整理，或压缩成一行，支持 MySQL、PostgreSQL、SQLite、SQL Server 和 BigQuery。

https://codeknife.dev/zh/sql-geshihua/

## 功能

把 SQL 按子句分行整理，或压缩成一行。除标准 SQL 外，还支持 MySQL、PostgreSQL、SQLite、T-SQL（SQL Server）和 BigQuery，语法错误会附带行和列。

## 使用方法

1. 粘贴 SQL，或拖入 `.sql` 文件。
2. 选择**格式化**或**压缩**，再选择方言、关键字的大小写和缩进。
3. 复制或下载结果，或用**将输出用作输入**把它变成下一次输入。

## 示例

格式化 `select id,name from users where active=1` 后，`SELECT`、`FROM` 和 `WHERE` 各占一行，列和条件缩进在下面。再压缩格式化后的查询，得到 `SELECT id,name FROM users WHERE active = 1`。

## 须知

- 只有空白会变，如果你选择了，关键字的大小写也会变。名称、字符串和数字保持输入时的样子。
- 压缩会删除 `--` 和 `/* */` 注释，但保留数据库会执行的 MySQL `/*! */` 注释和优化器提示 `/*+ */`。
- 选择数据库使用的方言：反引号是 MySQL，方括号是 T-SQL，`::` 类型转换是 PostgreSQL。
- 格式化器在你第一次格式化时才加载，所以第一次结果可能稍慢。压缩无需下载。

## 为什么方言很重要？

不同数据库书写名称和运算符的方式不同：MySQL 用反引号，T-SQL 用方括号，PostgreSQL 有 :: 类型转换和 $$ 字符串。方言选错时，合法的 SQL 可能无法解析，或排版怪异。

## 常见问题

### 格式化会改变查询的行为吗？

不会。只有空白会变，如果你选择了，关键字的大小写也会变。名称、字符串和数字保持原样。压缩会删除注释，但会保留数据库可能执行的 MySQL /*! */ 和 /*+ */ 注释。

### 为什么会报语法错误？

格式化器需要先读懂查询才能排版，所以会在第一个无法解析的记号处停下，并给出它的行和列。先检查方言，再看它指出的位置：缺少的逗号、引号或右括号。

### 这个工具会把我的 SQL 发送到别处吗？

不会。一切都在你的浏览器中进行。你输入的内容不会发送到我们的服务器。