Skip to content

问题背景

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,同时保留了基础事务安全约束,且不包含已废弃的参数)。

修改步骤

方法一:通过宝塔面板修改(推荐)

  1. 登录宝塔面板,进入【软件商店】 -> 找到已安装的【MySQL】 -> 点击【设置】。
  2. 在弹出的设置窗口中选择【配置修改】。
  3. Ctrl + F 搜索 sql_modesql-mode
    • 若已存在 sql_mode = ... 这一行,将其替换为推荐配置:
      ini
      sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
    • 若不存在该行,在 [mysqld] 配置段下方添加上述行。
  4. 点击【保存】。
  5. 切换到【服务】选项卡,点击【重启】重启 MySQL 服务。

方法二:通过 Linux 命令行修改 my.cnf

  1. 编辑 MySQL 配置文件:
    bash
    vim /etc/my.cnf
  2. [mysqld] 节点下添加或修改:
    ini
    [mysqld]
    sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
  3. 保存退出后,重启 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 即可。

承信租多门店租赁商城系统官方文档