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列表的表達(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時,select的字段不屬于group by的字段的話,sql語句就會報錯
2、這個錯誤發(fā)生在mysql 5.7.5 版本及以上版本會出現(xiàn)的問題:mysql 5.7.5版本以上默認(rèn)的sql配置是:sql_mode=“ONLY_FULL_GROUP_BY”,這個配置嚴(yán)格執(zhí)行了"SQL92標(biāo)準(zhǔn)"。很多從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認(rèn)為非法的,會報錯誤…
三、檢查是否是此原因
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)文章
詳細(xì)介紹mysql中l(wèi)imit與offset的用法
mysql查詢使用select命令,配合limit,offset參數(shù)可以讀取指定范圍的記錄,下面這篇文章主要給大家介紹了關(guān)于mysql中l(wèi)imit與offset用法的相關(guān)資料,需要的朋友可以參考下2022-05-05為什么MySQL數(shù)據(jù)庫索引選擇使用B+樹?
今天小編就為大家分享一篇關(guān)于為什么MySQL數(shù)據(jù)庫索引選擇使用B+樹?,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-03-03mysql二進(jìn)制日志文件恢復(fù)數(shù)據(jù)庫
喜歡的在服務(wù)器或者數(shù)據(jù)庫上直接操作的兄弟們你值得收藏下!不然你就悲劇了。-----(當(dāng)然我也是在網(wǎng)上搜索的資料!不過自己測試通過了的!)2014-08-08解決MySQL innoDB間隙鎖產(chǎn)生的死鎖問題
線上經(jīng)常偶發(fā)死鎖問題,當(dāng)時處理一張表,也沒有聯(lián)表處理,但是有兩個mq入口,并且消息體存在一樣的情況,但是是偶發(fā)的,又模擬不出來什么場景會導(dǎo)致死鎖,只能進(jìn)行代碼分析,問題還原的方式去排查問題,本文給大家介紹了如何解決MySQL innoDB間隙鎖產(chǎn)生的死鎖問題2023-10-10美團(tuán)網(wǎng)技術(shù)團(tuán)隊分享的MySQL索引及慢查詢優(yōu)化教程
這篇文章主要介紹了美團(tuán)網(wǎng)技術(shù)團(tuán)隊分享的MySQL索引及慢查詢優(yōu)化教程,結(jié)合了實際的磁盤IO情況對一些優(yōu)化方案作出了分析,十分推薦!需要的朋友可以參考下2015-11-11連接MySql速度慢的解決方法(skip-name-resolve)
這篇文章主要介紹了連接MySql速度慢的解決方法(skip-name-resolve),需要的朋友可以參考下2015-09-09