直接执行SELECT @@sql_mode;,若返回结果含STRICT_TRANS_TABLES或STRICT_ALL_TABLES即为启用;XAMPP 8.2+默认开启该模式;永久关闭需在my.ini的[mysqld]段下设sql_mode="NO_ENGINE_SUBSTITUTION"并重启MySQL服务。

如何确认当前 MySQL 是否启用严格模式
直接在 phpMyAdmin 的 SQL 标签页执行:SELECT @@sql_mode;,返回结果中若含 STRICT_TRANS_TABLES 或 STRICT_ALL_TABLES,即为开启严格模式。XAMPP 8.2+ 默认启用 STRICT_TRANS_TABLES,所以多数新装环境实际已处于严格模式。
修改 my.ini 永久关闭严格模式(针对 Drupal/ExileMod 等兼容性需求)
编辑 xampp\mysql\bin\my.ini,定位到 [mysqld] 段落,在其下方添加或修改这一行:
sql_mode = "NO_ENGINE_SUBSTITUTION"
注意:NO_ENGINE_SUBSTITUTION 必须保留,它是 XAMPP 安全兜底所依赖的模式;STRICT_TRANS_TABLES 必须移除。改完后必须重启 MySQL 服务(仅重启 Apache 不生效)。验证方式仍是执行 SELECT @@sql_mode;,确认返回值中不再出现 STRICT_* 相关项。
用 SQL 临时禁用严格模式(不推荐用于生产)
该操作只对当前会话或全局生效,MySQL 重启后失效:
- 仅对当前连接生效:
SET sql_mode = ''; - 对所有新连接生效(需管理员权限):
SET GLOBAL sql_mode = 'NO_ENGINE_SUBSTITUTION';
但 Drupal 安装过程会新建多个连接,且部分操作发生在不同会话中,仅设当前会话无效;而 SET GLOBAL 在某些 XAMPP 版本中可能因权限限制失败,稳定性不如改配置文件。
为什么不能只注释掉 sql-mode 行
在 my.ini 中如果直接注释掉 sql-mode=... 这一行,MySQL 启动时会回退到编译默认值 —— 对于较新版本(如 MySQL 5.7+),这个默认值就包含 STRICT_TRANS_TABLES。所以“不写” ≠ “关闭”,必须显式声明不含严格模式的值,例如 sql_mode = "NO_ENGINE_SUBSTITUTION"。


















