下载安装的是最新版的mysql5.7.x版本,默认是开启了 only_full_group_by 模式的,但开启这个模式后,原先的 group by 语句就报错,然后又把它移除了

下载安装的是最新版的mysql5.7.x版本,默认是开启了 only_full_group_by 模式的,但开启这个模式后,原先的 group by 语句就报错,然后又把它移除了。

一旦开启 only_full_group_by ,感觉,group by 将变成和 distinct 一样,只能获取受到其影响的字段信息,无法和其他未受其影响的字段共存,这样,group by 的功能将变得十分狭窄了

only_full_group_by 模式开启比较好。

因为在 mysql 中有一个函数: any_value(field) 允许,非分组字段的出现(和关闭 only_full_group_by 模式有相同效果)。

具体出错提示:

[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

1.1. 1、查看sql_mode

select @@global.sql_mode;

1.2. 查询出来的值为:

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

2、去掉ONLY_FULL_GROUP_BY,重新设置值。

select @@global.sql_mode;

set sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
set global sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

2.1. 3、上面是改变了全局sql_mode,对于新建的数据库有效。对于已存在的数据库,则需要在对应的数据下执行:

set sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';  

解决办法大致有两种:

一:在sql查询语句中不需要group by的字段上使用any_value()函数
这种对于已经开发了不少功能的项目不太合适,毕竟要把原来的sql都给修改一遍

3.1.

二:修改my.cnf(windows下是my.ini)配置文件,删掉only_full_group_by这一项
若我们项目的mysql安装在ubuntu上面,找到这个文件打开一看,里面并没有sql_mode这一配置项,想删都没得删。

当然,还有别的办法,打开mysql命令行,执行命令

select @@sql_mode;
这样就可以查出sql_mode的值,复制这个值,在my.cnf中添加配置项(把查询到的值删掉only_full_group_by这个选项,其他的都复制过去):

sql_mode=STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION;
如果 [mysqld] 这行被注释掉的话记得要打开注释。然后重重启mysql服务

注:使用命令

set sql_mode=STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

这样可以修改一个会话中的配置项,在其他会话中是不生效的。  

如果上面的不够清楚可以参考下面的语句

进入mysql命令行 执行如下两句语句

set global sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
set session sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

但是当重启mysql 问题又会复现

找到my.cnf,编辑它~把以下命令放到合适位置,重启mysql 服务,OK~报错没啦~

[mysqld]
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

注意 sql_model那句话 一定要放在[mysqld] 内容区域

mysql5.7不支持group by的解决办法

1、查看sql_mode

select @@global.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

2、去掉ONLY_FULL_GROUP_BY,重新设置值。

set @@global.sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

linux 下mysql5.7+使用group by、order by报错ONLY_FULL_GROUP_BY不修改配置文件

1.进入mysql
2.查询出sql_mode:

SELECT @@GLOBAL.sql_mode;
SELECT @@SESSION.sql_mode;
SELECT @@sql_mode;

发现前面都有ONLY_FULL_GROUP_BY

3. 在命令行中输入
set @@GLOBAL.sql_mode=(select replace(@@GLOBAL.sql_mode,‘ONLY_FULL_GROUP_BY',''));
以上三个sql_home都设置一遍,

4.退出mysql重新进入查看sql_mode; 

 

 到这里基本上就差不多了。

最新资讯
多家车企“消失”,参展的造车新势力不足10家

多家车企“消失”,参展

经历延期之后,北京车展于9月26日正式拉开帷幕。据第一
年入6亿,罗振宇要去IPO敲钟:一场演讲门票卖1300万

年入6亿,罗振宇要去IPO

罗振宇也要去IPO敲钟了。
堪比“双11”?蚂蚁战配基金仅1只一日售罄 有投资者只买100元

堪比“双11”?蚂蚁战配

9月25日下午2点多,易方达创新未来率先达到120亿销售限
期盼N年!微信绑定银行卡可免输16位卡号 网友神评论

期盼N年!微信绑定银行

微信官方宣布,现在可以不输卡号绑定银行卡了。 消息公
《细胞》:不是我管不住嘴,是大脑管不住它自己!

《细胞》:不是我管不住

科学已经证明,自制力再强也顶不住大脑的冲动啊。近期一
一个简单易懂,却可能没有答案的数学问题

一个简单易懂,却可能没

著名数学家陶哲轩的伯乐保罗·埃尔德(Paul Erdös)曾说:
最新文章
linux centos7安装mysql8的教程

linux centos7安装mys

这篇文章主要介绍了linux centos7安装mysql8的教程,本
Mysql高性能优化技能总结

Mysql高性能优化技能

这篇文章主要介绍了Mysql高性能优化技能总结的相关资
mysql 8.0.19 安装配置方法图文教程

mysql 8.0.19 安装配

这篇文章主要为大家详细介绍了mysql 8.0.19 安装配置
MySQL 的覆盖索引与回表的使用方法

MySQL 的覆盖索引与回

这篇文章主要介绍了MySQL 的覆盖索引与回表的使用方法
Windows10下mysql 8.0.19 winx64安装教程及修改初始密码

Windows10下mysql 8.0

这篇文章主要为大家详细介绍了Windows10下mysql 8.0.1
Workbench连接不上阿里云服务器Ubuntu的Mysql解决方法(已测)

Workbench连接不上阿

这两天为了解决workbench连接不上阿里云服务器的问题,