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不兼容
二、導致的原因
1、如果mysql是高版本,當執(zhí)行group 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時,為了語法兼容,大部分都會選擇調整sql_mode,使其保持跟5.6一致,為了盡量兼容程序。
3、在sql執(zhí)行時,出現(xiàn)該原因,簡單來說就是:由于開啟了ONLY_FULL_GROUP_BY的設置,如果select 的字段不在 group by 中,并且select 的字段未使用聚合函數(shù)(SUM,AVG,MAX,MIN等)的話,那么這條sql查詢是被mysql認為非法的,會報錯誤…
三、檢查是否是此原因
1、查看sql_mode
select @@GLOBAL.sql_mode;
2、執(zhí)行結果: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模式關閉狀態(tài)還是在開啟模式都可以正常執(zhí)行,不被mysql拒絕。
方法2、臨時修改sql_mode
方法2:僅用于臨時去掉ONLY_FULL_GROUP_BY,重新設置值,重啟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,修改為如下內容:(沒有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已經沒有only_full_group_by 屬性了
總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
- 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怎么關閉sql_mode=ONLY_FULL_GROUP_BY模式
- mysql8中如何設置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?設置方法ANSI_QUOTES?選項解析與應用小結
相關文章
詳細介紹mysql中l(wèi)imit與offset的用法
mysql查詢使用select命令,配合limit,offset參數(shù)可以讀取指定范圍的記錄,下面這篇文章主要給大家介紹了關于mysql中l(wèi)imit與offset用法的相關資料,需要的朋友可以參考下2022-05-05為什么MySQL數(shù)據(jù)庫索引選擇使用B+樹?
今天小編就為大家分享一篇關于為什么MySQL數(shù)據(jù)庫索引選擇使用B+樹?,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-03-03美團網技術團隊分享的MySQL索引及慢查詢優(yōu)化教程
這篇文章主要介紹了美團網技術團隊分享的MySQL索引及慢查詢優(yōu)化教程,結合了實際的磁盤IO情況對一些優(yōu)化方案作出了分析,十分推薦!需要的朋友可以參考下2015-11-11連接MySql速度慢的解決方法(skip-name-resolve)
這篇文章主要介紹了連接MySql速度慢的解決方法(skip-name-resolve),需要的朋友可以參考下2015-09-09