设为首页 收藏本站
查看: 1829|回复: 0

[经验分享] MYSQL5.7版本sql_mode=only_full_group_by问题

[复制链接]

尚未签到

发表于 2018-10-20 07:23:48 | 显示全部楼层 |阅读模式
  具体出错提示:
  [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
  原因:
  看一下group by的语法:
  select 选取分组中的列+聚合函数 from 表名称 group by 分组的列
  从语法格式来看,是先有分组,再确定检索的列,检索的列只能在参加分组的列中选。
  当前Mysql版本5.7.*,
  再看一下ONLY_FULL_GROUP_BY的意思是:对于GROUP BY聚合操作,如果在SELECT中的列,没有在GROUP BY中出现,那么这个SQL是不合法的,因为列不在GROUP BY从句中,也就是说查出来的列必须在group by后面出现否则就会报错,或者这个字段出现在聚合函数里面。
  
  解决办法:
  1.1. 查看sql_mode.
  SELECT @@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
  临时方法:
  去掉 ONLY_FULL_GROUP
  set @@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';
  即:默认开启ONLY_FULL_GROUP_BY,
  去掉ONLY_FULL_GROUP_BY,重新设置值。
  上面是改变了全局sql_mode,对于新建的数据库有效。对于已存在的数据库,则需要在对应的数据下执行。
  再查看sql_mode.
  确实是没有 ONLY_FULL_GROUP了。
  永久方法:
  1.修改my.cnf
  oneinstack安装的系统,my.cnf在 /etc/my.cnf。
  vi /etc/my.cnf,在[mysqld]中如果找不到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
  不要写在[mysql]下。
  2.重启mysql
  service mysqld restart.
  再查看:sql_mode.
  OK!!!
  解释:
  修改my.cnf(windows下是my.ini)配置文件,删掉only_full_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 模式有相同效果)。
  ----------  招募未来大神 -----------------------
  如果您有利他之心,乐于帮助他人,乐于分享
  如果您遇到php问题,百度且问了其他群之后仍没得到解答
  欢迎加入,PHP技术问答群,QQ群:292626152
  教学相长!帮助他人,自己也会得到提升!
  为了珍惜每个人的宝贵时间,请大家不要闲聊!
  愿我们互相帮助,共同进步!
  加入时留言暗号,php,ajax,thinkphp,yii...


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-623812-1-1.html 上篇帖子: SQL性能优化 下篇帖子: sql存储过程完全教程
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表