Appearance
问题背景
EBAOZU V4 要求数据库为 MySQL >= 8.0。在默认安装的 MySQL 8.0 环境下,sql_mode 默认开启了 ONLY_FULL_GROUP_BY 等严格模式,可能导致复杂的聚合查询、统计报表或复杂分组 SQL 执行时抛出 Expression #N of SELECT list is not in GROUP BY clause... 错误。
重要警告:MySQL 8.0 已彻底移除
NO_AUTO_CREATE_USER语法!如果在 MySQL 8.0 配置中添加NO_AUTO_CREATE_USER,将导致 MySQL 服务启动失败或语法报错。
推荐的 SQL_MODE 配置
建议在 MySQL 8.0 配置文件中设置如下 sql_mode:
ini
sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION(移除了 ONLY_FULL_GROUP_BY,同时保留了基础事务安全约束,且不包含已废弃的参数)。
修改步骤
方法一:通过宝塔面板修改(推荐)
- 登录宝塔面板,进入【软件商店】 -> 找到已安装的【MySQL】 -> 点击【设置】。
- 在弹出的设置窗口中选择【配置修改】。
- 按
Ctrl + F搜索sql_mode或sql-mode:- 若已存在
sql_mode = ...这一行,将其替换为推荐配置:inisql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION - 若不存在该行,在
[mysqld]配置段下方添加上述行。
- 若已存在
- 点击【保存】。
- 切换到【服务】选项卡,点击【重启】重启 MySQL 服务。
方法二:通过 Linux 命令行修改 my.cnf
- 编辑 MySQL 配置文件:bash
vim /etc/my.cnf - 在
[mysqld]节点下添加或修改:ini[mysqld] sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION - 保存退出后,重启 MySQL 服务:bash
systemctl restart mysqld # 或宝塔环境 /etc/init.d/mysqld restart
验证修改结果
登录 MySQL 客户端执行以下 SQL 查询当前的 sql_mode:
sql
SELECT @@GLOBAL.sql_mode, @@SESSION.sql_mode;确认输出的模式列表中不再包含 ONLY_FULL_GROUP_BY 即可。