Mysql8報(bào)錯(cuò)this is incompatible with sql_mode=only_full_group_by問(wèn)題
一、報(bào)錯(cuò)問(wèn)題
1055 - Expression #2 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列表的表達(dá)式#2不在GROUP BY子句中,并且包含非聚合列的jsfwpt.o。
它在功能上不依賴于GROUP BY子句中的列;這與sql_mode=only_full_group_by不兼容
二、導(dǎo)致的原因
1、如果mysql是高版本,當(dāng)執(zhí)行g(shù)roup by時(shí),select的字段不屬于group by的字段的話,sql語(yǔ)句就會(huì)報(bào)錯(cuò)
2、這個(gè)錯(cuò)誤發(fā)生在mysql 5.7.5 版本及以上版本會(huì)出現(xiàn)的問(wèn)題:mysql 5.7.5版本以上默認(rèn)的sql配置是:sql_mode=“ONLY_FULL_GROUP_BY”,這個(gè)配置嚴(yán)格執(zhí)行了"SQL92標(biāo)準(zhǔn)"。很多從5.6升級(jí)到5.7時(shí),為了語(yǔ)法兼容,大部分都會(huì)選擇調(diào)整sql_mode,使其保持跟5.6一致,為了盡量兼容程序。
3、在sql執(zhí)行時(shí),出現(xiàn)該原因,簡(jiǎn)單來(lái)說(shuō)就是:由于開(kāi)啟了ONLY_FULL_GROUP_BY的設(shè)置,如果select 的字段不在 group by 中,并且select 的字段未使用聚合函數(shù)(SUM,AVG,MAX,MIN等)的話,那么這條sql查詢是被mysql認(rèn)為非法的,會(huì)報(bào)錯(cuò)誤…
三、檢查是否是此原因
1、查看sql_mode
select @@GLOBAL.sql_mode;
2、執(zhí)行結(jié)果:sql_mode開(kāi)啟了only_full_group_by 屬性

四、解決辦法
方法1、使用函數(shù)ANY_VALUE()
使用ANY_VALUE(<字段名>)將報(bào)錯(cuò)的字段包裹起來(lái)
- MySQL有any_value(field)函數(shù),它主要的作用就是抑制ONLY_FULL_GROUP_BY值被拒絕。
- 這樣sql語(yǔ)句不管是在ONLY_FULL_GROUP_BY模式關(guān)閉狀態(tài)還是在開(kāi)啟模式都可以正常執(zhí)行,不被mysql拒絕。
方法2、臨時(shí)修改sql_mode
方法2:僅用于臨時(shí)去掉ONLY_FULL_GROUP_BY,重新設(shè)置值,重啟mysql之后此方法就會(huì)失效
在已創(chuàng)建的數(shù)據(jù)庫(kù)中執(zhí)行:
SET sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
修改mysql全局的sql_mode執(zhí)行:
SET @@global.sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
方法3、永久修改sql_mode
通過(guò)修改mysql配置文件my.ini解決
windows系統(tǒng)MySQL8永久修改sql_mode的方式
1、在MySQL安裝的目錄所在的分區(qū)根目錄下,“查看“——勾選顯示“隱藏的項(xiàng)目”,
2、my.ini的路徑:ProgramData\MySQL\MySQL Server 8.0

3、打開(kāi)my.ini文件
在[mysqld]下面找sql-mode,修改為如下內(nèi)容:(沒(méi)有sql-mode就追加在[mysqld]下面)
sql_mode="STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION"

4、重啟mysql

liunx上的修改方式
1、文件路徑一般在:/etc/my.cnf,/etc/mysql/my.cnf
2、my.ini的具體修改方法略:與windows上一樣
五、驗(yàn)證

sql_mode已經(jīng)沒(méi)有only_full_group_by 屬性了
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- mysql 8.0 找不到my.ini配置文件以及報(bào)sql_mode=only_full_group_by解決方案
- 解決MySQL this is incompatible with sql_mode=only_full_group_by 問(wèn)題
- MySQL配置sql_mode的參數(shù)屬性作用
- mysql怎么關(guān)閉sql_mode=ONLY_FULL_GROUP_BY模式
- mysql8中如何設(shè)置sql-mode
- MySQL出現(xiàn)this?is?incompatible?with?sql_mode=only_full_group_by錯(cuò)誤的解決辦法
- MySQL報(bào)錯(cuò):sql_mode=only_full_group_by的4種輕松解決方法(含舉例)
- MySQL?中的?SQL_MODE?設(shè)置方法ANSI_QUOTES?選項(xiàng)解析與應(yīng)用小結(jié)
相關(guān)文章
MySQL學(xué)習(xí)記錄之KEY分區(qū)引發(fā)的血案
這篇文章主要給大家介紹了關(guān)于MySQL學(xué)習(xí)記錄之KEY分區(qū)引發(fā)的血案的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11
Mysql auto_increment 重新計(jì)數(shù)(讓id從1開(kāi)始)
當(dāng)清空一個(gè)表的時(shí)候,重新插入數(shù)據(jù),發(fā)現(xiàn)auto_increment屬性的字段計(jì)數(shù)不是從1開(kāi)始的時(shí)候,可以使用以下命令2012-12-12
mysql8.0.11 winx64安裝配置方法圖文教程(win10)
這篇文章主要為大家詳細(xì)介紹了win10下mysql8.0.11 winx64安裝配置方法圖文教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-05-05
MySQL?InnoDB?存儲(chǔ)引擎的底層邏輯架構(gòu)
這篇文章主要為大家介紹了MySQL?InnoDB?存儲(chǔ)引擎的底層邏輯架構(gòu)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09
MySQL手動(dòng)注冊(cè)binlog文件造成主從異常的原因
這篇文章主要介紹了MySQL手動(dòng)注冊(cè)binlog文件造成主從異常的原因,幫助大家更好的理解和使用MySQL數(shù)據(jù)庫(kù),感興趣的朋友可以了解下2020-10-10
MySQL 利用frm文件和ibd文件恢復(fù)表數(shù)據(jù)
這篇文章主要介紹了MySQL 利用frm文件和ibd文件恢復(fù)表數(shù)據(jù),幫助大家更好的理解和學(xué)習(xí)使用MySQL,感興趣的朋友可以了解下2021-03-03
MySQL數(shù)據(jù)庫(kù)存儲(chǔ)引擎和分支現(xiàn)狀分析
在MySQL經(jīng)歷了2008年Sun的收購(gòu)和2009年Oracle收購(gòu)Sun的過(guò)程中,基本處于停滯發(fā)展的情況,在可以預(yù)見(jiàn)的未來(lái),MySQL是肯定會(huì)被Oracle擱置并且逐步雪藏消滅掉的。2011-03-03
mysql通過(guò)文檔讀取并執(zhí)行命令之快速為mysql添加多用戶和數(shù)據(jù)庫(kù)技巧
這篇文章主要介紹了mysql通過(guò)文檔讀取并執(zhí)行命令之快速為mysql添加多用戶和數(shù)據(jù)庫(kù)技巧的相關(guān)資料,需要的朋友可以參考下2015-09-09

