如何解決MySQL?this?is?incompatible?with?sql_mode=only_full_group_by問(wèn)題
MySQL this is incompatible with sql_mode=only_full_group_by

代碼示例:
在MySQL中,ONLY_FULL_GROUP_BY 是一個(gè)SQL模式設(shè)置,它要求在使用GROUP BY時(shí),SELECT語(yǔ)句中引用的所有列必須在GROUP BY子句中明確指定,或者是聚合函數(shù)的一部分。
這個(gè)模式的目的是為了防止產(chǎn)生不確定的查詢結(jié)果。
如果你遇到了ONLY_FULL_GROUP_BY的錯(cuò)誤,以下是一些解決方案:
1.修改SQL語(yǔ)句
- 確保
SELECT列表中的所有列要么包含在GROUP BY子句中,要么作為聚合函數(shù)的一部分。 - 例如,如果你的查詢是這樣的:
SELECT column1, column2 FROM table GROUP BY column1;
- 你需要將
column2也加入到GROUP BY子句中 - 或者對(duì)
column2使用聚合函數(shù) - 如
MAX(column2)或SUM(column2)
2.使用聚合函數(shù)
- 對(duì)于
SELECT列表中不在GROUP BY子句中的列 - 可以使用聚合函數(shù),如
MAX(),MIN(),SUM(),COUNT()等
3.禁用ONLY_FULL_GROUP_BY
- 你可以在會(huì)話級(jí)別或全局級(jí)別禁用
ONLY_FULL_GROUP_BY。 - 這可以通過(guò)以下命令完成:
SET SESSION sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
- 或者,你可以修改MySQL的配置文件(例如
my.cnf或my.ini) - 去掉
ONLY_FULL_GROUP_BY:
[mysqld] sql_mode = NO_AUTO_VALUE_ON_ZERO,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
- 修改配置文件后,需要重啟MySQL服務(wù)以使更改生效。
4.使用ANY_VALUE()函數(shù)
ANY_VALUE()函數(shù)可以用來(lái)選擇每個(gè)分組的任意值- 這在某種程度上可以繞過(guò)
ONLY_FULL_GROUP_BY的限制
5.永久修改sql_mode
- 在某些情況下,如果你不希望每次重啟MySQL服務(wù)后都要重新設(shè)置
sql_mode,你可以將更改永久化到MySQL的配置文件中。 - 請(qǐng)注意,禁用
ONLY_FULL_GROUP_BY可能會(huì)讓你的查詢結(jié)果變得不確定,因?yàn)镸ySQL將不再?gòu)?qiáng)制要求GROUP BY子句包含所有非聚合列。 - 因此,在禁用這個(gè)模式之前,最好先評(píng)估一下它對(duì)你的查詢邏輯和結(jié)果的影響。
如果你正在使用MySQL 8.0或更高版本,并且嘗試修改sql_mode時(shí)遇到了問(wèn)題,比如出現(xiàn)了錯(cuò)誤:
ERROR 1231 (42000): Variable 'sql_mode' can't be set to the value of 'NO_AUTO_CREATE_USER'
- 這是因?yàn)樵贛ySQL 8.0及以上版本中,
NO_AUTO_CREATE_USER已經(jīng)被移除。 - 在這種情況下,你需要從
sql_mode中移除這個(gè)值。 - 在處理這個(gè)問(wèn)題時(shí),建議先嘗試修改SQL語(yǔ)句以符合
ONLY_FULL_GROUP_BY的要求,因?yàn)檫@是最安全的做法,可以避免潛在的數(shù)據(jù)一致性問(wèn)題。 - 如果這不可能或者不切實(shí)際,那么再考慮禁用
ONLY_FULL_GROUP_BY。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- 詳解MySQL的sql_mode查詢與設(shè)置
- MySQL配置sql_mode的參數(shù)屬性作用
- mysql ONLY_FULL_GROUP_BY設(shè)置sql_mode無(wú)效排查問(wèn)題(windows)
- mysql5.7版本因?yàn)閟ql_mode設(shè)置導(dǎo)致的問(wèn)題以及解決
- MySQL?中的?SQL_MODE?設(shè)置方法ANSI_QUOTES?選項(xiàng)解析與應(yīng)用小結(jié)
- MySQL報(bào)錯(cuò)sql_mode=only_full_group_by的問(wèn)題解決
- 淺談mysql的sql_mode可能會(huì)限制你的查詢
相關(guān)文章
mysql could not be resolved: Name or service not known
今天查看mysql日志的時(shí)候發(fā)現(xiàn)[Warning] IP address '10.0.0.220' could not be resolved: Name or service not known,原來(lái)是mysql DNS反解:skip-name-resolve的原因,屏蔽一下就可以了2015-08-08
MySQL中g(shù)roup_concat函數(shù)深入理解
本文通過(guò)實(shí)例介紹了MySQL中的group_concat函數(shù)的使用方法,需要的朋友可以適當(dāng)參考下2012-11-11
my.cnf參數(shù)配置實(shí)現(xiàn)InnoDB引擎性能優(yōu)化
目前來(lái)說(shuō):InnoDB是為Mysql處理巨大數(shù)據(jù)量時(shí)的最大性能設(shè)計(jì)。它的CPU效率可能是任何其它基于磁盤的關(guān)系數(shù)據(jù)庫(kù)引擎所不能匹敵的。在數(shù)據(jù)量大的網(wǎng)站或是應(yīng)用中Innodb是倍受青睞的。另一方面,在數(shù)據(jù)庫(kù)的復(fù)制操作中Innodb也是能保證master和slave數(shù)據(jù)一致有一定的作用。2017-05-05
MySQL8 Connection refused遠(yuǎn)程訪問(wèn)失敗的解決
MySQL本地連接正常但遠(yuǎn)程不通,需檢查HOST權(quán)限是否允許遠(yuǎn)程(使用%通配符),確認(rèn)MySQL綁定地址是否為0.0.0.0,若僅監(jiān)聽(tīng)本地需修改并重啟服務(wù),同時(shí)通過(guò)telnet測(cè)試本地與遠(yuǎn)程端口連通性2025-09-09
win10下mysql 8.0.18 安裝配置方法圖文教程(windows版)
這篇文章主要介紹了windows版的mysql 8.0.18 安裝配置方法圖文教程,文中安裝步驟介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-11-11

