解决MySQL-this is incompatible with sql_mode=only_full_group_by 问题(提供window、Linux、docker解决方法和流程)
解释:
MySQL中的ONLY_FULL_GROUP_BY
模式要求所有SELECT语句中的列,要么是在GROUP BY语句里声明的,要么是被包含在聚合函数中。这是为了确保查询结果的准确性,避免非聚合列产生的多对一(或一对多)关系中的不确定性。
解决方法:
- 修改SQL查询,确保所有非聚合列都在GROUP BY子句中声明,或者被用在聚合函数中。
如果不希望修改SQL查询,可以通过以下命令暂时关闭
ONLY_FULL_GROUP_BY
模式:SET GLOBAL sql_mode = (SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
或者
SET SESSION sql_mode = (SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
注意:这种方法在数据库重启后会失效。
- 永久关闭
ONLY_FULL_GROUP_BY
模式,可以在MySQL配置文件(通常是my.cnf
或my.ini
)中注释掉或删除sql_mode
的设置,然后重启MySQL服务。 另一个永久的解决方案是在配置文件中显式设置
sql_mode
,移除ONLY_FULL_GROUP_BY
,例如:[mysqld] sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
重启MySQL服务后生效。
请根据实际情况选择适合的解决方法。如果选择关闭ONLY_FULL_GROUP_BY
,请确保理解可能带来的查询结果影响。如果选择修改SQL查询,请确保它们符合业务逻辑并且高效。
评论已关闭