MySQL5.7默认打开ONLY_FULL_GROUP_BY模式问题与解决方案

MySQL5.7后将sql_mode的ONLY_FULL_GROUP_BY模式默认设置为打开状态,这样一来,很多之前的sql语句可能会出现错误,错误信息如下:

Error Code: 1055. Expression #3 of SELECT list is not in GROUP BY clause and contains nonaggregated column ‘×××’ which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

描述:select的列都要在group中,或许本身是聚合列(SUM,AVG,MAX,MIN)才行

解决方案一:

这时我们可以通过navicat输入select @@global.sql_mode来查看当前数据库的sql_mode属性值

复制查询结果,去掉ONLY_FULL_GROUP_BY,重新赋值,执行成功后,就可以将ONLY_FULL_GROUP_BY模式默认设置为关闭状态,解决之前的sql报错问题

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_model,服务器重启后,设置可能会失效,鉴于凡是重启之后都要手动去set @@global.sql_mode,所以比较麻烦

接下来介绍设置永久生效模式:
1.以下是window版本的:

找到mysql的安装目录,我的安装目录是 D:\software\mysql-5.7.24-winx64\mysql-5.7.24-winx64

之后重启mysql再去查询: select @@global.sql_mode 发现查询出来的值就是my.ini里面配置的sql_mode的内容

 

posted on 2018-12-27 17:10 一个忘记自己年龄的程序猿 阅读() 评论() 编辑 收藏

版权声明:本文为chatpam原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/chatpam/p/10186100.html