Files
dbx/docs/content/docs/sql-formatter.cn.mdx
T

122 lines
4.6 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
title: SQL 格式化
description: 使用数据库方言格式化所选 SQL 或整个编辑器,并管理当前版本的格式化选项和 JSON 配置。
---
DBX 会根据当前连接选择接近的 SQL 方言,并把格式化结果写回查询编辑器。选中一段 SQL 时只格式化选区;没有选区时格式化整个编辑器。
你可以使用编辑器工具栏的 **格式化 SQL** 按钮,或使用[快捷键](/cn/docs/keyboard-shortcuts)中配置的格式化命令。
<Callout type="info">
SQL 格式化只重排文本,不会执行 SQL。无法解析的语法会返回错误并保留原内容;单次格式化最多处理 `1,000,000` 个字符。
</Callout>
## 方言选择
DBX 当前对以下方言使用专用格式化语法:
| 连接类型 | 格式化方言 |
| --- | --- |
| MySQL | MySQL |
| PostgreSQL、openGauss、GaussDB、KingbaseES、Redshift 等兼容连接 | PostgreSQL |
| SQLite、Turso、rqlite、Cloudflare D1 | SQLite |
| SQL Server | Transact-SQL |
| ClickHouse | ClickHouse |
| 其他 SQL 数据库 | 通用 SQL;必要时再尝试 PostgreSQL 语法 |
MongoDB 查询编辑器使用单独的 Mongo Shell 格式化器,不使用本页的 SQL 方言映射。
## 默认风格
默认排版规则:能放下的语句保持一行,放不下的按子句逐行展开,子句的后续元素与第一个元素对齐;条件的逻辑操作符放在续行行首;`CREATE TABLE` 的列定义按列对齐。下面的设置用于调整这些规则,**恢复默认值**会回到该风格。
## 配置格式化选项
前往 **设置 → SQL 格式化**。表单模式提供以下选项:
| 选项 | 可用值或作用 |
| --- | --- |
| 关键字、数据类型、函数、标识符大小写 | `upper`、`lower`、`preserve` |
| 缩进样式 | `standard`、`tabularLeft`、`tabularRight` |
| 缩进字符 | 空格或 Tab |
| Tab 宽度 | `2` 或 `4` |
| 逻辑操作符换行 | `before`、`after`,或 `none` 保持在同一行 |
| FROM 子句排版 | `sameLine` 让首个表留在 `FROM` 行,`newLine` 让它换到下一行 |
| 表达式宽度 | `50`、`80` 或 `120` |
| 查询间空行 | `0`、`1` 或 `2` |
| 保留空行 | 保留语句之间的空行 |
| 紧凑操作符 | 减少操作符周围的空格 |
| 分号前换行 | 把语句结尾分号放到新行 |
| 参数类型 | 识别位置参数、编号参数、命名参数、引号参数或自定义正则参数 |
**恢复默认值**会恢复当前代码定义的默认格式化设置。设置窗口中的改动需要点击 **应用** 才会持久化。
## JSON 模式与导入导出
JSON 模式适合精确编辑、复制或迁移格式化器配置。当前配置文件只包含 `version`、`formatter` 和 `options`:
```json
{
"version": 1,
"formatter": "sql-formatter",
"options": {
"keywordCase": "upper",
"dataTypeCase": "preserve",
"functionCase": "preserve",
"identifierCase": "preserve",
"indentStyle": "standard",
"useTabs": false,
"tabWidth": 2,
"logicalOperatorNewline": "before",
"fromClauseLayout": "sameLine",
"expressionWidth": 120,
"linesBetweenQueries": 1,
"preserveEmptyLines": false,
"denseOperators": false,
"newlineBeforeSemicolon": false,
"paramTypes": null
}
}
```
JSON 编辑器会实时校验配置。以下情况会阻止应用或导入:
- JSON 语法错误;
- `version` 不是 `1`;
- `formatter` 不是 `sql-formatter`;
- `options` 中包含未知字段;
- 字段值不在当前代码允许的范围内。
点击 **导出配置** 会下载 `dbx-sql-formatter.json`。导入只替换 SQL 格式化选项,不会修改连接、编辑器快捷键或其他 DBX 设置。完整设置迁移请参阅[配置云同步](/cn/docs/cloud-sync)。
## 参数识别
`paramTypes` 为 `null` 时使用格式化器默认识别规则。需要额外语法时,可以配置:
```json
{
"positional": true,
"numbered": ["?", "$"],
"named": [":", "@", "$"],
"quoted": [":", "@", "$"],
"custom": [
{ "regex": "@\\{[^}]+\\}" }
]
}
```
- `numbered` 只接受 `?`、`:`、`$`;
- `named` 和 `quoted` 只接受 `:`、`@`、`$`;
- `custom` 中每项只能包含非空且合法的 `regex`。
DBX 始终额外识别 `${name}` 和 `#{name}` 形式的变量,避免这类模板变量导致格式化解析失败。旧配置中的非空 `params` 字段不再用于文本替换,应改用 `paramTypes`。
<Cards>
<Card title="查询编辑器" href="/cn/docs/query-editor">
了解格式化、压缩、执行范围和自动补全。
</Card>
<Card title="SQL 代码片段" href="/cn/docs/sql-snippets">
使用可跳转占位符创建可复用 SQL 模板。
</Card>
</Cards>