# 系统变量

系统变量用于控制会话或整个实例引擎的行为。可通过 `SET` 修改（权限与是否允许动态修改因变量而异），用 `SHOW VARIABLES` 查看。

## 全局与会话

| 范围 | 含义 |
| --- | --- |
| **全局（GLOBAL）** | 影响新会话的默认行为；部分项在实例生命周期内保持 |
| **会话（SESSION）** | 仅当前连接有效，断开后失效 |
| **Both** | 同时存在全局默认与会话覆盖 |

```sql
SHOW VARIABLES;
SHOW VARIABLES LIKE 'sql_mode';
SHOW GLOBAL VARIABLES;
SHOW SESSION VARIABLES LIKE '%timeout%';

SET SESSION autocommit = 0;
SET GLOBAL max_allowed_packet = 33554432;  -- 需足够权限，且变量须允许动态修改
```

自定义用户变量（`@var`）与系统变量不同，用于会话内临时保存标量，见客户端与 `SET @a = ...` 用法。

## 常用变量（摘要）

下表为文档中常见、产品侧较常碰到的项。完整列表以 `SHOW VARIABLES` 输出为准。

| 变量 | 典型作用 | 备注 |
| --- | --- | --- |
| `autocommit` | 是否自动提交 | 事务脚本常临时关闭 |
| `sql_mode` | SQL 模式集合 | 影响严格性、GROUP BY 等 |
| `character_set_*` / `collation_*` | 字符集与排序规则 | 常见默认 `utf8mb4` |
| `time_zone` | 会话时区 | 影响 `TIMESTAMP` 显示与转换 |
| `lower_case_table_names` | 表名大小写 | 常见为 1（不敏感）；通常不可随意改 |
| `max_allowed_packet` | 单包最大字节 | 大结果 / 大语句时需调大 |
| `interactive_timeout` / `net_write_timeout` | 空闲与写超时 | 长连接与慢网 |
| `auto_increment_increment` / `auto_increment_offset` | 自增步长与偏移 | |
| `foreign_key_checks` | 是否检查外键 | 批量装载时可临时关闭（需评估一致性） |
| `save_query_result` / `query_result_*` | 查询结果落存相关 | MatrixOne 扩展能力 |
| `sql_safe_updates` | 安全更新 | 限制无键无 WHERE 的更新删除 |
| 密码 / 登录策略类 | 复杂度、失败限制、白名单等 | 实例安全策略相关 |

## 查询结果相关（扩展）

若实例开启查询结果保存：

- `save_query_result`：是否保存。  
- `query_result_maxsize` / `query_result_timeout`：大小与保留时间类限制。

具体是否对你的租户开放，以控制台与 `SHOW VARIABLES` 为准。

## 相关页面

- [SQL 语句](statements.md)（`SET` / `SHOW VARIABLES`）
- [使用限制](limitations.md)
