MySQL 出现 this is incompatible with sql_mode=only_full_group_by错误 解决办法

Posted Forever_jacklove

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL 出现 this is incompatible with sql_mode=only_full_group_by错误 解决办法相关的知识,希望对你有一定的参考价值。

这个就是错误截图

出现原因: mysql的版本问题

MySQL 5.7.5以上版本,实现了对功能依赖的检测。如果启用了only_full_group_by SQL模式(默认启用),那么MySQL就会拒绝执行 select list、HAVING condition或ORDER BY list引用既不在GROUP BY子句中被命名,也不在功能上依赖于GROUP BY列(由GROUP BY列唯一确定)的未聚合列的查询。

从MySQL5.7.5开始,默认的SQL模式包括only_full_group_by。(在5.7.5之前,MySQL没有检测到功能依赖项,only_full_group_by在默认情况下是不启用的。关于前5.7.5行为的描述,请参阅MySQL 5.6参考手册。)
 

解决办法:两种

第一种:修改MySQL的配置文件

1. 连接数据库 输入下面命令,查询sql的模式

select @@sql_mode;

2. 修改数据库配置my.ini文件

在你安装数据库的文件夹下的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

3. 重启MySQL服务

备注:我个人觉得最好不用这样吧 因为项目可能其他地方或许用到了这种模式,最好的方法是不要改动mysql的配置。正所谓能跑起来就不要动他的原理!

第二种方法:修改自己的sql

每个字段前加上any_value()  这种方法比较好  只需要修改sql 不会影响到其他问题

修改前:

SELECT
	id AS a,
	name  AS  b,
    age AS c
FROM
	user

修改后:

SELECT
	any_value(id)AS a,
	any_value(name)AS  b,
    any_value(age)AS c
FROM
	user

sql查询出现1055 this is incompatible with sql_mode=only_full_group_by

今天在测试服务器上突然出现了这么一个MySQL的问题,同样的代码正式服没有问题,那肯定就是出在了配置上,查了一下原因才明白原来是数据库版本为5.7以上的版本,

默认是开启了 only_full_group_by 模式的,但开启这个模式后,原先的 group by 语句就报错,

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

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

select @@sql_mode;

你会看到sql_mode的配置情况:

其中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://www.cnblogs.com/52lnamp

以上是关于MySQL 出现 this is incompatible with sql_mode=only_full_group_by错误 解决办法的主要内容,如果未能解决你的问题,请参考以下文章

sql查询出现1055 this is incompatible with sql_mode=only_full_group_by

Mysql5.7版本sql错误:this is incompatible with sql_mode=only_full_group_by

Mysql5.7版本sql错误:this is incompatible with sql_mode=only_full_group_by

this is incompatible with sql_mode=only_full_group_by解决方案

this is incompatible with sql_mode=only_full_group_by解决方案

this is incompatible with sql_mode=only_full_group_by解决方案