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

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

3、打開my.ini文件
在[mysqld]下面找sql-mode,修改為如下內(nè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上一樣
五、驗證

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

