問題如下:
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以上的
Windows解決辦法:
先查詢查看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
然後退出數據庫,在服務裏面重啓MySQL就可以
Ubuntu系統/Linux系統解決辦法
我的數據庫配置文件存在 /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;