Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 21 additions & 1 deletion system-variables.md
Original file line number Diff line number Diff line change
Expand Up @@ -2479,6 +2479,26 @@ mysql> SELECT job_info FROM mysql.analyze_jobs ORDER BY end_time DESC LIMIT 1;
- 默认值:`ON`
- 这个变量用来控制是否开启 statement summary 功能。如果开启,SQL 的耗时等执行信息将被记录到系统表 `information_schema.STATEMENTS_SUMMARY` 中,用于定位和排查 SQL 性能问题。

### `tidb_enable_strict_not_null_check` <span class="version-mark">从 v9.0.0 版本开始引入</span>

- 作用域:SESSION | GLOBAL
- 是否持久化到集群:是
- 是否受 Hint [SET_VAR](/optimizer-hints.md#set_varvar_namevar_value) 控制:否
- 类型:布尔型
- 默认值:`ON`
- 该变量用于控制 TiDB 在执行 `INSERT` 语句时,是否对显式写入 `NOT NULL` 列的 `NULL` 值进行严格校验。
- 取值说明:
- `ON`:启用严格的 `NOT NULL` 校验。该行为更接近 MySQL 8.0 的标准语义。
- 在严格 SQL 模式下,如果向 `NOT NULL` 列插入 `NULL` 值,TiDB 会返回错误。
- 在非严格 SQL 模式下:对于单行 `INSERT` 语句,如果向 `NOT NULL` 列插入 `NULL` 值,TiDB 会返回错误;对于多行 `INSERT` 语句,如果向 `NOT NULL` 列插入 `NULL` 值,TiDB 会将该错误降级为 warning,并写入该列数据类型对应的隐式默认值。
- `OFF`:关闭严格的 `NOT NULL` 校验,用于兼容 TiDB 早期版本中较宽松的行为。关闭后,当向 `NOT NULL` 列插入 `NULL` 值时,TiDB 会将该错误降级为 warning,并写入该列数据类型对应的隐式默认值。例如,数字类型写入 `0`,字符串类型写入空字符串 `''`。

> **注意:**
>
> - TiDB 早期版本对 `NOT NULL` 约束的校验相对宽松,向 `NOT NULL` 列插入 `NULL` 值时,可能会自动写入该列数据类型对应的隐式默认值。从 v8.5.0 起,TiDB 收紧了这类校验:即使在非严格 SQL 模式下,向 `NOT NULL` 列插入 `NULL` 值也可能直接返回错误。该行为更接近 MySQL 8.0 语义,但可能影响依赖 TiDB 早期宽松行为的存量业务。
>
> - 如果从 TiDB 早期版本升级到启用了严格 `NOT NULL` 校验的版本,并且现有业务逻辑依赖向 `NOT NULL` 列写入 `NULL` 后自动使用隐式默认值的行为,升级后相关 SQL 语句可能会返回错误。在无法立即修改业务逻辑的情况下,可以临时将该变量设置为 `OFF`,以降低升级兼容性风险。建议后续修改应用逻辑,避免向 `NOT NULL` 列显式写入 `NULL` 值。

### `tidb_enable_strict_double_type_check` <span class="version-mark">从 v5.0 版本开始引入</span>

- 作用域:SESSION | GLOBAL
Expand Down Expand Up @@ -2760,7 +2780,7 @@ v5.0 后,用户仍可以单独修改以上系统变量(会有废弃警告)
- 是否受 Hint [SET_VAR](/optimizer-hints.md#set_varvar_namevar_value) 控制:否
- 类型:布尔型
- 默认值:`OFF`
- 该变量用于控制在悲观事务中,外键约束检查对父表中的行加锁时是否使用共享锁(而非排他锁)。开启后,多个并发事务可以同时对同一父表行执行外键检查而不互相阻塞,从而降低锁冲突并提升子表并发写入性能。
- 该变量用于控制在悲观事务中,外键约束检查对父表中的行加锁时是否使用共享锁(而非排他锁)。开启后,多个并发事务可以同时对同一父表行执行外键检查而不互相阻塞,从而降低锁冲突并提升子表并发写入性能。

### `tidb_gc_concurrency` <span class="version-mark">从 v5.0 版本开始引入</span>

Expand Down
Loading