mysql怎么關(guān)閉sql_mode=ONLY_FULL_GROUP_BY模式
JAVA后臺報錯信息:
Caused by: java.sql.SQLSyntaxErrorException: Expression #16 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'mysql_data.s.k_persion' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with
原因: mysql默認(rèn)開啟only_full_group_by模式,當(dāng)碰到不符合格式的group by 語句就會報錯;(sql_mode=only_full_group_by 模式 要求 select 多少個字段對象,則group by 后面就需要帶上多少個字段對象;)
例如sql語句如下:
-- 查詢?nèi)藛T信息,按部門分組,顯示姓名和部門 SELECT S.PSL_NAME,S.DEPARTMENT FROM k_persion S GROUP BY DEPARTMENT
運(yùn)行時就會報錯:
Caused by: Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'mysql_data.k_persion .PSL_NAME' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
其大體的意思就是這個sql語句不符合 mysql_data 數(shù)據(jù)庫的group by 格式要求(因為這個數(shù)據(jù)sql_mode=only_full_group_by),但我們把當(dāng)sql改成如下格式后就可以運(yùn)行了:
-- 查詢?nèi)藛T信息,按部門分組,顯示姓名和部門 SELECT S.PSL_NAME,S.DEPARTMENT FROM k_persion S GROUP BY DEPARTMENT,PSL_NAME
這樣的格式是不報錯了,但是查詢的目標(biāo)效果卻錯了;因此我們需要把sql_mode 的 only_full_group_by模式關(guān)掉。
解決方式:1、臨時關(guān)閉(當(dāng)mysql重啟后失效):使用sql語句修改的方式修改sql_mode 的Session級和GLOBAL級信息
查看sql_mode 的信息
-- 查看數(shù)據(jù)庫版本和 Session級信息 SELECT VERSION(),@@sql_mode; -- 查看數(shù)據(jù)庫版本和 GLOBAL級信息 SELECT VERSION(),@@GLOBAL.sql_mode;
我們發(fā)現(xiàn)在對應(yīng)的sql_mode列中都含有 ONLY_FULL_GROUP_BY 參數(shù),因此我們需要把這個屬性去掉,打開數(shù)據(jù)庫查詢界面,運(yùn)行如下語句;
-- 關(guān)閉 session級 SET SESSION sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY','')); -- 關(guān)閉 GLOBAL級 SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
再查詢sql_mode后發(fā)現(xiàn)ONLY_FULL_GROUP_BY 已經(jīng)沒有了,然后再運(yùn)行我們的sql語句就不報錯了。
2、永久關(guān)閉:永久關(guān)閉ONLY_FULL_GROUP_BY,需要去修改mysql服務(wù)的配置文件my.ini 文件,本人是Win10服務(wù),若是linux服務(wù)環(huán)境,應(yīng)該是 XX/etc/my.cnf 的文件。(若想永久生效,修改配置文件是永恒不變的真理…)
找到mysql的my.ini 文件(在mysql服務(wù)安裝的路徑下找),打開文件在[mysqld] 中添加如下語句:
sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'
如下圖:
保存后重啟mysql服務(wù)即可。
若不確定自己的sql_mode=‘xxxx’ 到底要有哪些參數(shù),可以通過 SELECT @@sql_mode; 查詢出自己數(shù)據(jù)庫現(xiàn)有的參數(shù),然后ONLY_FULL_GROUP_BY對象去掉即可。
總結(jié)
到此這篇關(guān)于mysql怎么關(guān)閉sql_mode=ONLY_FULL_GROUP_BY模式的文章就介紹到這了,更多相關(guān)關(guān)閉sql_mode=ONLY_FULL_GROUP_BY模式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 解決MySQL 5.7.9版本sql_mode=only_full_group_by問題
- MySql版本問題sql_mode=only_full_group_by的完美解決方案
- MySQL錯誤提示:sql_mode=only_full_group_by完美解決方案
- 解決MySql版本問題sql_mode=only_full_group_by
- mysql報錯sql_mode=only_full_group_by解決
- 解決MySQL this is incompatible with 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=only_full_group_by的問題解決
相關(guān)文章
利用Sqoop實(shí)現(xiàn)MySQL數(shù)據(jù)導(dǎo)入Hive的全流程
在大數(shù)據(jù)領(lǐng)域中,MySQL 和 Hive 是兩種常見的存儲工具,MySQL 適合事務(wù)處理,而 Hive 則是用于離線數(shù)據(jù)分析的利器,本文將全面講解如何使用 Sqoop 將 MySQL 數(shù)據(jù)導(dǎo)入 Hive 的完整流程,包括環(huán)境配置、具體操作步驟以及最佳實(shí)踐和常見問題解決方案,需要的朋友可以參考下2024-12-12mysqld_multi在Linux服務(wù)器上運(yùn)行多個MySQL實(shí)例
在Linux系統(tǒng)上使用mysqld_multi來啟動和管理多個MySQL實(shí)例是一種常見的做法,這種方式允許你在同一臺機(jī)器上運(yùn)行多個MySQL服務(wù),每個服務(wù)可以有不同的配置和數(shù)據(jù)目錄,這篇文章展示如何設(shè)置和使用mysqld_multi來啟動多個MySQL實(shí)例2025-02-02用SELECT... INTO OUTFILE語句導(dǎo)出MySQL數(shù)據(jù)的教程
這篇文章主要介紹了用SELECT... INTO OUTFILE語句導(dǎo)出MySQL數(shù)據(jù)的教程,是MySQL入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下2015-05-05安裝MySQL后include目錄下沒有找到libmysql.lib
安裝了MySQL后,在其安裝目錄下的include文件夾并沒有找到libmysql.lib,主要原因是在安裝MySQL的時候,沒有勾選develop component這一選項造成的2014-08-08mysql數(shù)據(jù)遷移到Oracle的正確方法
這篇文章主要為大家詳細(xì)介紹了mysql數(shù)據(jù)遷移到Oracle的正確方法,文中步驟介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-02-02