MySQL 出现 which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by错误 解决办法 图文教程

标签:, ,
来源: 老季博客
日期: 2019-9-2
作者: 腾讯云/服务器VPS推荐评测/Vultr
阅读数: 89

老季在接触到的一个项目中,导入MYSQL文件之后出现了错误,具体错误如下:

Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column ‘poweridc.t.id’ which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

查询MySQL版本可以在命令行模式刚连接上数据库时就能看到,或者在进入mysql后使用命令:status查看版本号,

既然是版本的问题,那就查询一下配置看看具体的情况,命令行连接上数据库,再输入命令:

select @@sql_mode;

sql_mode = ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

MySQL 出现 which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by错误 解决办法 图文教程

其中ONLY_FULL_GROUP_BY就是造成这个错误的罪魁祸首了,

对于group by聚合操作,如果在select中的列没有在group by中出现,那么这个SQL是不合法的,因为列不在group by从句中,所以设置了sql_mode=only_full_group_by 的数据库,在使用group by时就会报错,

既然知道了问题,那么修改这个配置就可以了,找到MySQL的配置文件,在linux系统上/etc/my.cnf文件,查询sql_mode字段,我并没有在配置文件中找到这个关键字,所以我手动添加进去:

sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

需要注意的一点是一定要添加在[mysqld]配置内,这样添加完后重启mysql才会生效,退出数据库:exit,重启命令:

service mysqld restart;

刷新页面报错信息消失成功解决,再次连接上数据库查看sql_mode配置

select @@sql_mode;

到此已经成功解决了这个问题。

链接到文章: https://jiloc.com/46224.html

回复给 “MySQL 出现 which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by错误 解决办法 图文教程”

Cobra说道:

谢谢!完美解决!

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注