咨询MySQL 5.7真实默认sql_mode设置:文档与执行结果不一致
MySQL 5.7.8 真实默认sql_mode设置说明
结论
MySQL 5.7.8的真实默认sql_mode确实包含官方文档列出的7项:
- ONLY_FULL_GROUP_BY
- STRICT_TRANS_TABLES
- NO_ZERO_IN_DATE
- NO_ZERO_DATE
- ERROR_FOR_DIVISION_BY_ZERO
- NO_AUTO_CREATE_USER
- NO_ENGINE_SUBSTITUTION
为什么执行SET sql_mode = default后只显示3项
SET sql_mode = default并非恢复到MySQL 5.7版本的官方默认模式,这个语句实际是将当前会话的sql_mode设置为编译时的基础默认值(仅STRICT_TRANS_TABLES、NO_AUTO_CREATE_USER、NO_ENGINE_SUBSTITUTION这3项),而非实例初始化或安装时的默认配置。
如何确认/恢复真实默认sql_mode
- 查看实例启动配置:检查MySQL配置文件(my.cnf/my.ini)中的
sql_mode配置项,如果该配置项不存在,实例启动时会自动加载官方默认的7项;如果有自定义配置,则以配置文件内容为准。 - 手动恢复官方默认:若要将当前会话或全局的sql_mode恢复到官方默认,执行对应语句:
- 会话级生效:
SET sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'; - 全局级生效(需权限,重启后仍需看配置文件):
SET GLOBAL sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
- 会话级生效:
补充说明
- NO_AUTO_CREATE_USER模式在MySQL 5.7.10及之后版本被废弃,但5.7.8版本仍属于默认包含项。
- 若实例初始化时通过
--sql-mode参数指定了自定义模式,会覆盖官方默认设置,需以初始化参数为准。
内容的提问来源于stack exchange,提问作者Ryannnnnnnnn
相关产品推荐
相关产品推荐

