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