mysql怎么關(guān)閉sql_mode=ONLY_FULL_GROUP_BY模式
JAVA后臺(tái)報(bào)錯(cuò)信息:
Caused by: java.sql.SQLSyntaxErrorException: Expression #16 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'mysql_data.s.k_persion' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with
原因: mysql默認(rèn)開啟only_full_group_by模式,當(dāng)碰到不符合格式的group by 語句就會(huì)報(bào)錯(cuò);(sql_mode=only_full_group_by 模式 要求 select 多少個(gè)字段對(duì)象,則group by 后面就需要帶上多少個(gè)字段對(duì)象;)
例如sql語句如下:
-- 查詢?nèi)藛T信息,按部門分組,顯示姓名和部門 SELECT S.PSL_NAME,S.DEPARTMENT FROM k_persion S GROUP BY DEPARTMENT
運(yùn)行時(shí)就會(huì)報(bào)錯(cuò):
Caused by: Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'mysql_data.k_persion .PSL_NAME' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
其大體的意思就是這個(gè)sql語句不符合 mysql_data 數(shù)據(jù)庫的group by 格式要求(因?yàn)檫@個(gè)數(shù)據(jù)sql_mode=only_full_group_by),但我們把當(dāng)sql改成如下格式后就可以運(yùn)行了:
-- 查詢?nèi)藛T信息,按部門分組,顯示姓名和部門 SELECT S.PSL_NAME,S.DEPARTMENT FROM k_persion S GROUP BY DEPARTMENT,PSL_NAME
這樣的格式是不報(bào)錯(cuò)了,但是查詢的目標(biāo)效果卻錯(cuò)了;因此我們需要把sql_mode 的 only_full_group_by模式關(guān)掉。
解決方式:1、臨時(shí)關(guān)閉(當(dāng)mysql重啟后失效):使用sql語句修改的方式修改sql_mode 的Session級(jí)和GLOBAL級(jí)信息
查看sql_mode 的信息
-- 查看數(shù)據(jù)庫版本和 Session級(jí)信息 SELECT VERSION(),@@sql_mode; -- 查看數(shù)據(jù)庫版本和 GLOBAL級(jí)信息 SELECT VERSION(),@@GLOBAL.sql_mode;
我們發(fā)現(xiàn)在對(duì)應(yīng)的sql_mode列中都含有 ONLY_FULL_GROUP_BY 參數(shù),因此我們需要把這個(gè)屬性去掉,打開數(shù)據(jù)庫查詢界面,運(yùn)行如下語句;
-- 關(guān)閉 session級(jí) SET SESSION sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY','')); -- 關(guān)閉 GLOBAL級(jí) SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
再查詢sql_mode后發(fā)現(xiàn)ONLY_FULL_GROUP_BY 已經(jīng)沒有了,然后再運(yùn)行我們的sql語句就不報(bào)錯(cuò)了。
2、永久關(guān)閉:永久關(guān)閉ONLY_FULL_GROUP_BY,需要去修改mysql服務(wù)的配置文件my.ini 文件,本人是Win10服務(wù),若是linux服務(wù)環(huán)境,應(yīng)該是 XX/etc/my.cnf 的文件。(若想永久生效,修改配置文件是永恒不變的真理…)
找到mysql的my.ini 文件(在mysql服務(wù)安裝的路徑下找),打開文件在[mysqld] 中添加如下語句:
sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'
如下圖:

保存后重啟mysql服務(wù)即可。
若不確定自己的sql_mode=‘xxxx’ 到底要有哪些參數(shù),可以通過 SELECT @@sql_mode; 查詢出自己數(shù)據(jù)庫現(xiàn)有的參數(shù),然后ONLY_FULL_GROUP_BY對(duì)象去掉即可。
總結(jié)
到此這篇關(guān)于mysql怎么關(guān)閉sql_mode=ONLY_FULL_GROUP_BY模式的文章就介紹到這了,更多相關(guān)關(guān)閉sql_mode=ONLY_FULL_GROUP_BY模式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Windows10 mysql 8.0.12 非安裝版配置啟動(dòng)方法
這篇文章主要為大家詳細(xì)介紹了Windows10 mysql 8.0.12 非安裝版配置啟動(dòng),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-05-05
MySQL之同表一個(gè)字段如何賦值給另一個(gè)字段
這篇文章主要介紹了MySQL之同表一個(gè)字段如何賦值給另一個(gè)字段問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07
Django創(chuàng)建項(xiàng)目+連通mysql的操作方法
這篇文章主要介紹了Django創(chuàng)建項(xiàng)目+連通mysql的操作方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03
php運(yùn)行提示Can''t connect to MySQL server on ''localhost''的解決方法
有些時(shí)候我們運(yùn)行php的時(shí)候,頁面提示Can't connect to MySQL server on 'localhost',那么就需要參考下面的方法來解決。2011-06-06
mysql數(shù)據(jù)庫常見的優(yōu)化操作總結(jié)(經(jīng)驗(yàn)分享)
這篇文章主要給大家介紹了關(guān)于mysql數(shù)據(jù)庫常見的優(yōu)化操作,文章總結(jié)的都是個(gè)人日常開發(fā)使用mysql數(shù)據(jù)庫的經(jīng)驗(yàn)所得,其中包括Index索引、少用SELECT*、EXPLAIN SELECT以及開啟查詢緩存等相關(guān)資料,相信會(huì)對(duì)大家具有一定的參考價(jià)值,需要的朋友們下面來一起看看吧。2017-04-04

