【数据库】MySQL解决ONLY_FULL_GROUP_BY模式
错误报告:
表达式 #38 在 SELECT 列表中未包含在 GROUP BY 子句中,并且包含了非聚合列 ‘platform.oai.score’,此列并非在 GROUP BY 子句中的列的功能性依赖;这与 sql_mode 设置为 only_full_group_by 不兼容。
错误起因:
在 MySQL 数据库版本 5.7 及以上版本中,默认激活了 ONLY_FULL_GROUP_BY SQL 模式。在此模式下,执行 GROUP BY 操作时,若 SELECT 语句中的列未在 GROUP BY 子句中声明,则该 SQL 语句将被视为非法。由于相关列未在 GROUP BY 子句中指定,因此当数据库设置中包含 sql_mode=only_full_group_by 时,使用 GROUP BY 将会导致报错。
解决方案:
-
检视当前模式:执行以下查询语句
SELECT @@GLOBAL.sql_mode;
-
在 Linux 系统中,编辑
/etc/my.cnf
文件,加入以下配置代码,然后重启数据库服务:sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
-
在 Windows 系统中,请打开
my.ini
文件,添加以下配置代码,保存后重启数据库服务:sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION