[Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column 'information_schema.PROFILING.SEQ' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
快速解决
SELECT @@sql_mode;
SET @@GLOBAL.sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
若失败,sql_mode设置被限制在会话级别:在某些情况下,MySQL管理员可能会限制对GLOBAL级别sql_mode设置的更改。这意味着可以更改会话级别的sql_mode设置,但无法更改全局设置。解决如下:
SET SESSION sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
报错原因
-
错误信息与MySQL中的
sql_mode
设置相关。默认情况下,MySQL启用了严格模式,包括ONLY_FULL_GROUP_BY
模式。该模式要求在使用GROUP BY
子句时,SELECT
子句中的所有列都必须要么包含在GROUP BY
子句中,要么包含在聚合函数(如COUNT()
、SUM()
等)中。 -
错误提示指出
ORDER BY
子句中的表达式#1不在GROUP BY
子句中,并且包含非聚合列information_schema.PROFILING.SEQ
,这与ONLY_FULL_GROUP_BY
模式不兼容。
解决办法
- 将
sql_mode
设置为非严格模式,以允许在GROUP BY
子句中使用非聚合列。可以通过修改MySQL的配置文件(如my.cnf
或my.ini
)来更改sql_mode
设置,或者在每个会话中使用SET
语句进行修改。 - 将非聚合列包含在
GROUP BY
子句中,以满足ONLY_FULL_GROUP_BY
模式的要求。 - 使用聚合函数对非聚合列进行聚合操作,以满足
ONLY_FULL_GROUP_BY
模式的要求。
其他情况
如果在MySQL安装中没有找到my.ini
文件,那么可以尝试以下方法来修改sql_mode
设置:
-
登录MySQL服务器,可以使用命令行工具如MySQL Shell或通过图形化工具如phpMyAdmin。
-
执行以下SQL语句,查看当前的
sql_mode
设置:SELECT @@sql_mode;
这将返回当前的
sql_mode
值。 -
根据查询结果,确定要修改的
sql_mode
设置。您可以将ONLY_FULL_GROUP_BY
从sql_mode
中移除,或者根据需要进行其他调整。 -
执行以下SQL语句,修改
sql_mode
设置:SET GLOBAL sql_mode = '<new_sql_mode>';
将
<new_sql_mode>
替换为您希望设置的新的sql_mode
值。注意:
SET GLOBAL
语句会立即生效,但只会影响新的连接,已经存在的连接不会受到影响。如果您希望立即生效并影响所有连接,可以使用SET @@GLOBAL.sql_mode = '<new_sql_mode>';
语句。 -
重新执行第2步的SQL语句,确保
sql_mode
已经被修改。
通过以上步骤,能够成功修改sql_mode
设置,解决ONLY_FULL_GROUP_BY
模式引起的问题。
注意
请注意,在修改sql_mode
设置时,需要谨慎评估和测试对现有应用程序和查询的影响。确保了解各个模式的含义,并根据自己的需求进行调整。