ERROR 1055 (42000): Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column ‘jol.solution.nick’ which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
mysql5.7以上默认开启了only_full_group_by选项。我的版本是mysql8.0以上的
先查询查看sql_mode中的内容
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_ENGINE_SUBSTITUTION |
+-----------------------------------------------------------------------------------------------------------------------+
解决办法有两种,第一种是临时解决,不治本,数据库重启还会重新出现此问题,第二种是修改my.ini配置文件,治本,也方便
办法1:
将查询到的sql_mode中ONLY_FULL_GROUP_BY删去即可,重启就会失效
set @@GLOBAL.sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
办法2:
先找到自己mysql安装路径
select @@basedir;
+-----------+
| @@basedir |
+-----------+
| E:\mysql\ |
+-----------+
然后进入文件夹找到自己的my.ini配置文件,修改[mysqld]中的内容,添加下面的内容就可以
一定要加在[mysqld]里面,就是下面这行代码,就是将查询到的sql_mode中ONLY_FULL_GROUP_BY删去
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
我的数据库配置文件存在 /etc/mysql/mysql.conf.d/mysqld.cnf 里,所以直接打开这个文件
vim /etc/mysql/mysql.conf.d/mysqld.cnf
打开文件后键入
i #插入命令
会进入这个配置文件
可能会出现这个情况鼠标滚轮下滑没用,使用键盘按键⬇下拉就行
跟windows一样,添加sql_mode,也是删除ONLY_FULL_GROUP_BY后的那一串东西,加进入后键入键盘左上角的Esc,就会退出插入模式,然后再键入 :wq 后回车就可以保存文件,然后再重启MySQL就可以
重启命令:
sudo service mysql restart
然后进入MySQL输入下面的代码查看,即可
select @@GLOBAL.sql_mode;