资讯专栏INFORMATION COLUMN

关于Mysql5.7高版本group by新特性报错

Winer / 3391人阅读

摘要:命令报错看一下的意思是对于聚合操作,如果在中的列,没有在中出现,那么这个是不合法的,因为列不在从句中,也就是说查出来的列必须在后面出现否则就会报错,或者这个字段出现在聚合函数里面。

一个项目的开发到测试上线运营,团队对项目的管理不成熟会影响项目的开发效率。由于项目是我刚接手,独自在Centos搭建PHP环境,所以就考虑使用高版本,选择了Mysql5.7,本地开发环境还是Windows继承环境,PHP环境和Centos是统一的7.0,但是Mysql版本是5.3的,本地开发一切顺利,到了Centos下出现了一些问题,这就是因为开发环境和测试|线上环境不一致导致的。

mysql命令gruop by报错this is incompatible with sql_mode=only_full_group_by

看一下ONLY_FULL_GROUP_BY的意思是:对于GROUP BY聚合操作,如果在SELECT中的列,没有在GROUP BY中出现,那么这个SQL是不合法的,因为列不在GROUP BY从句中,也就是说查出来的列必须在group by后面出现否则就会报错,或者这个字段出现在聚合函数里面。

接下来直接说一下解决问题的过程。

先进入Mysql客户端执行命令

select @@GLOBAL.sql_mode;
+--------------------------------------------------------------------------------------------------------------------------------------+
| @@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 
+--------------------------------------------------------------------------------------------------------------------------------------+

看到上面反悔的命令行第一段---> ONLY_FULL_GROUP_BY;

网上给出的解决方法有大概三种,一种是在程序代码的语句里,给查询条件的列增加聚合函数,如果你这样做,那么就很麻烦了,而且以在开发过程中使用group by的语句都要下功夫,这个方法就算了。

推荐直接关掉这个配置项。

那么怎么把这一项关掉呢,直接在客户端执行命令关掉不就可以了么,set @@global.sql_mode = .......,执行成功,然后执行命令查看一下,果然第一项不在了,然后我们再重启一下mysql服务,再次查询,还在..哈哈。。

那么,接下来放绝招了,还是从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

千万要注意的是,网上很多方案都差不多,但是就是成功不了,原因是网上很多帖子给出的方案都是前面多了一个set,按照上面的方法就可以了~

#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 是不对滴~

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/47522.html

相关文章

  • 关于Mysql5.7版本group by特性报错

    摘要:命令报错看一下的意思是对于聚合操作,如果在中的列,没有在中出现,那么这个是不合法的,因为列不在从句中,也就是说查出来的列必须在后面出现否则就会报错,或者这个字段出现在聚合函数里面。 一个项目的开发到测试上线运营,团队对项目的管理不成熟会影响项目的开发效率。由于项目是我刚接手,独自在Centos搭建PHP环境,所以就考虑使用高版本,选择了Mysql5.7,本地开发环境还是Windows继...

    andot 评论0 收藏0
  • MySQL5.7应当注意的参数

    摘要:简介本篇文章主要介绍初始化应当注意的参数,对于不同环境间实例迁移,这些参数同样应当注意。注本文介绍的参数都是在配置文件部分。该参数指定的最大连接数,是全局变量可动态修改默认为。该参数控制是否大小写敏感,主要影响库名及表名。 简介: 本篇文章主要介绍 MySQL 初始化应当注意的参数,对于不同环境间实例迁移,这些参数同样应当注意。 注: 本文介绍的参数都是在配置文件 [mysqld] 部...

    Tony 评论0 收藏0
  • Centos搭建开发环境,PHP7+ Nginx1.12+ Mysql5.7

    摘要:因为他们的首要任务是保证服务器的稳定,而不是追求最新。否则会提示报错。此处代码用来修改密码强度密码任意,但长度在位或以上。修改修改两处这两行前面的去掉将更换成,保存后退出启动,并将它设置为开机启动。1.更新yum源 yum -y update   2. 安装 epel-release yum install epel-release -y 检测安...

    gecko23 评论0 收藏0
  • Mac 的mysql5.7没有配置文件,如何解决only_full_group_by 问题

    摘要:属性是在数据库,表中,点进去,可以看到默认属性是解决这个问题,就需要修改这个字段的属性。方法二修改配置的文件在安装这个版本的的时候,我没有发现的配置文件。 showImg(https://segmentfault.com/img/bVXPg9?w=980&h=1246); 数据库版本是5.7.19,在写语句的时候,只要涉及ORDER BY,就会报错, ERROR 1055 (42000...

    Flands 评论0 收藏0
  • Mac 的mysql5.7没有配置文件,如何解决only_full_group_by 问题

    摘要:属性是在数据库,表中,点进去,可以看到默认属性是解决这个问题,就需要修改这个字段的属性。方法二修改配置的文件在安装这个版本的的时候,我没有发现的配置文件。 showImg(https://segmentfault.com/img/bVXPg9?w=980&h=1246); 数据库版本是5.7.19,在写语句的时候,只要涉及ORDER BY,就会报错, ERROR 1055 (42000...

    Harriet666 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<