阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

关于MySQL 5.7高版本group by新特性报错

115次阅读
没有评论

共计 1755 个字符,预计需要花费 5 分钟才能阅读完成。

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

关于 MySQL 5.7 高版本 group by 新特性报错

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

本文永久更新链接地址 :http://www.linuxidc.com/Linux/2017-10/147872.htm

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计1755字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中