建網(wǎng)站公司seo技巧seo排名優(yōu)化
一、背景:
本來(lái)已經(jīng)正常運(yùn)行的平臺(tái),突然有一天由于對(duì)服務(wù)器進(jìn)行部分操作遷移,發(fā)現(xiàn)jar可以正常啟動(dòng),但是訪問(wèn)功能一直報(bào)錯(cuò),監(jiān)控后臺(tái)日志后,發(fā)現(xiàn)了問(wèn)題:
報(bào)錯(cuò)的具體信息如下:
Caused by: java.sql.SQLSyntaxErrorException: Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'frae.p.id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
二、問(wèn)題分析:
通過(guò)對(duì)問(wèn)題的查找分析,字面意思理解:
SELECT 列表的表達(dá)式 #1 不在 GROUP BY 子句中,并且包含非聚合列“grades.order_id” 它在功能上不依賴于
GROUP BY 子句中的列; 這與 sql_mode=only_full_group_by 不兼容使用GROUP BY 語(yǔ)句違背了sql_mode=only_full_group_by。因?yàn)閙ysql版本5.7之后默認(rèn)的模式是ONLY_FULL_GROUP_BY。
查看官方文檔,發(fā)現(xiàn)從?MySQL 5.7.5 開(kāi)始,默認(rèn) SQL 模式包括 ONLY_FULL_GROUP_BY。 (在 5.7.5 之前,MySQL 不檢測(cè)函數(shù)依賴,并且默認(rèn)不啟用 ONLY_FULL_GROUP_BY。)這可能會(huì)導(dǎo)致一些sql語(yǔ)句失效。
三、處理方法:
方法一:
MySQL查詢、設(shè)置配置:
-
查看參數(shù):SHOW VARIABLES WHERE variable_name like '%sql_mode%';
-
設(shè)置參數(shù):SET GLOBAL sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
-
刷新配置:flush privileges;
?flush privileges;
?按照步驟一理論上就可以解決該問(wèn)題
方法二:
通過(guò)更改my.cnf實(shí)現(xiàn)。本質(zhì)上和2是一樣的,都是關(guān)閉ONLY_FULL_GROUP_BY模式
我是通過(guò)yum安裝的,安裝手冊(cè)在這里,需要的朋友可以用,傳送門(mén):超詳細(xì)的yum方式安裝mysql_yum在線安裝mysql-CSDN博客
如果my.cnf中有sql_mode配置,則將ONLY_FULL_GROUP_BY去掉。
如果沒(méi)有,直接編輯 /etc/my.cnf,在文件的最后加上:
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
然后重啟數(shù)據(jù)庫(kù)即可:
systemctl restart mysqld.service
然后可以看配置,已經(jīng)更新為更改后的內(nèi)容,然后就可以愉快的使用了
?
本文推薦使用方法二?
https://www.jb51.net/article/251380.htm