MySQL报错:sql_mode=only_full_group_by解决方法
解释:
MySQL中的sql_mode=ONLY_FULL_GROUP_BY
模式要求SELECT查询中的所有列,除了在AGGREGATE函数中使用的列,都必须在GROUP BY子句中声明。这是为了确保查询结果的准确性和一致性,因为在默认的SQL标准下,GROUP BY子句的行为是未定义的。
解决方法:
- 修改查询语句,确保所有非聚合列都包含在GROUP BY子句中。
- 临时或永久关闭
ONLY_FULL_GROUP_BY
模式。
关闭ONLY_FULL_GROUP_BY
的方法:
临时关闭(仅影响当前会话):
SET sql_mode = (SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
永久关闭(需要在MySQL配置文件中设置):
找到MySQL配置文件my.cnf
或my.ini
(通常位于/etc/my.cnf
、/etc/mysql/my.cnf
或C:\ProgramData\MySQL\MySQL Server X.Y\my.ini
)。
编辑配置文件,注释掉或删除包含sql_mode='ONLY_FULL_GROUP_BY'
的行。
添加或修改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
可能会导致查询结果的不一致性,因此在实际生产环境中应谨慎操作。如果可能,最好是修改查询语句以满足ONLY_FULL_GROUP_BY
要求。
评论已关闭