国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

解決MySQL-this is incompatible with sql_mode=only_full_group_by 問題(提供window、Linux、docker解決方法和流程)

這篇具有很好參考價值的文章主要介紹了解決MySQL-this is incompatible with sql_mode=only_full_group_by 問題(提供window、Linux、docker解決方法和流程)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

一、錯誤原因分析

出現(xiàn)這個問題是因?yàn)?,對于GROUP BY操作,如果在SELECT中的列,沒有在GROUP BY中出現(xiàn),那么這個SQL是不合法的,因?yàn)榱胁辉贕ROUP BY從句中。
也就是說如果我分組查詢,比如我表里有三個字段 id、name、type,我根據(jù)type分組查詢,那么結(jié)果集里就不能包含name字段。

# 錯誤查詢 會出現(xiàn)this is incompatible with sql_mode=only_full_group_by
SELECT `name`,`type` FROM user_01 GROUP BY `type`;

# 正確查詢 不會出現(xiàn)問題
SELECT `type` FROM user_01 GROUP BY `type`;

二、原理分析&解決方案分析

  • 要想解決這個問題首先要知道MySQL的 sql_mode 是什么,sql_mode 是個很容易被忽視的變量,sql_mode 是規(guī)范一些數(shù)據(jù)庫校驗(yàn)規(guī)則,比如這里出現(xiàn)的sql_mode=only_full_group_by 問題,only_full_group_by 就是一個校驗(yàn)規(guī)則,會規(guī)定分組查詢結(jié)果集不能有GROUP BY中沒有出現(xiàn)的列。

  • 這個錯誤發(fā)生在mysql 5.7.5 版本及以上版本會出現(xiàn)的問題,mysql 5.7.5版本以上默認(rèn)的 sql_mode 是包含 only_full_group_by ,這個配置嚴(yán)格執(zhí)行了"SQL92標(biāo)準(zhǔn)",很多從5.6升級到5.7時,為了語法兼容,大部分都會選擇調(diào)整sql_mode,使其保持跟5.6一致,為了盡量兼容程序。

  • 有兩種解決邏輯:

    • 第一種:就是順應(yīng)這個規(guī)則,別在GROUP BY是返回額外的列,當(dāng)然,竟然SQL都這樣寫了肯定是需要額外的列了,我們看第二種方法
    • 第二種:放開限制就行,將sql_mode 中的 only_full_group_by 剔除就行。

二、臨時解決(不需要重啟MySQL,適配所有版本和任意安裝方式的MySQL,重啟MySQL后會失效)

臨時解決這個問題可以不用重啟MySQL服務(wù),,通過 set global 命令直接改就行。

1、查看當(dāng)前 sql_mode (我這里MySQL的版本是8.0,其它版本也是一樣的做法)

登錄數(shù)據(jù)庫執(zhí)行下面命令可以看到當(dāng)前包含的 sql_mode ,不同版本MySQL結(jié)果可能不同,但是我們的問題是因?yàn)?only_full_group_by 引起的,我們看看里面是否有這個。

SHOW VARIABLES LIKE "sql_mode";

this is incompatible with sql_mode=only_full_group_by,運(yùn)維,數(shù)據(jù)庫,mysql,sql,linux,容器,docker
這里可以看到,我的 sql_mode 中第一個就是 only_full_group_by

ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

2、臨時修改 sql_mode

將剛剛查詢到的 sql_mode 刪除里面的 ONLY_FULL_GROUP_BY,重新設(shè)置到系統(tǒng)配置中即可。

# 修改全局配置 sql_mode 
set global sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
# 修改session配置 sql_mode 
set session sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';

PS:如果是使用代碼(JDBC)連接的數(shù)據(jù)庫,修改完成之后最好重啟一下代碼服務(wù),mysql服務(wù)不用重啟,如果不重啟可能還是會出現(xiàn)該問題,重啟后生效。

三、徹底解決(需要重啟MySQL才會生效)

要徹底解決這個問題就是將臨時解決方案中的 sql_mode 通過配置文件設(shè)置即可,建議是和臨時方案一起使用,先通過臨時方案讓業(yè)務(wù)服務(wù)可用,然后在配置文件也配置 sql_mode 下一次MySQL重啟后生效。

1、window 配置 sql_mode

window 上的 MySQL 配置文件默認(rèn)是在 C:\Program Files\MySQL\MySQL Server 8.0\my-default.ini,打開這個 my-default.ini 文件找到[mysql],在 [mysqld] 下設(shè)置 sql_mode ,將通過SHOW VARIABLES LIKE "sql_mode";查詢出來的 sql_mode 剔除 ONLY_FULL_GROUP_BY 即可。

sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'

this is incompatible with sql_mode=only_full_group_by,運(yùn)維,數(shù)據(jù)庫,mysql,sql,linux,容器,docker

  • 重啟MySQL:
    • 打開Windows的服務(wù)管理器,可以通過快捷鍵Win+R打開運(yùn)行窗口,輸入services.msc后按回車鍵。

    • 找到MySQL服務(wù),服務(wù)名稱可能會叫MySQLxx(xx是版本信息),右鍵點(diǎn)擊,選擇停止服務(wù)。

    • 等待MySQL服務(wù)停止后,再右鍵點(diǎn)擊MySQL服務(wù),選擇啟動服務(wù)。

    • 重啟MySQL服務(wù)后,可以通過以下命令檢查MySQL是否已正常運(yùn)行

重啟好在MySQL客戶端執(zhí)行SHOW VARIABLES LIKE "sql_mode";查詢 sql_mode 是否已經(jīng)改變。

2、Linux 配置 sql_mode

Linux 上的 MySQL 配置文件默認(rèn)是在 /etc/mysql/my.cnf,打開這個 my.cnf 文件找到[mysql],在 [mysqld] 下設(shè)置 sql_mode ,將通過SHOW VARIABLES LIKE "sql_mode";查詢出來的 sql_mode 剔除 ONLY_FULL_GROUP_BY 即可。

# 打開/etc/mysql/my.cnf
vi /etc/mysql/my.cnf
sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'

this is incompatible with sql_mode=only_full_group_by,運(yùn)維,數(shù)據(jù)庫,mysql,sql,linux,容器,docker

  • 重啟MySQL:
    service mysqld restartservice mysql restart

3、docker 配置 sql_mode

docker 安裝的 linux版本MySQL 配置文件默認(rèn)是在也是容器的 /etc/mysql/my.cnf 中,不過有點(diǎn)區(qū)別的是我們一般去直接改容器中的配置文件,而是會將額外配置文件路徑掛載出來,而且容器中是沒有 vi 這種工具不方便直接改配置,這里會對有做掛載和沒有做掛載的修改方式都說做說明。

使用docker安裝的MySQL的額外配置文件是在容器的 /etc/mysql/conf.d 目錄的,MySQL會讀取這個目錄下所以以 .cnf 結(jié)尾的文件,如果有對這個目錄做掛載最好,如果沒有做掛載也可用通過宿主機(jī)copy到容器內(nèi)部。

1、配置文件準(zhǔn)備

我的配置文件目錄是掛載到了 /home/docker/mysql/conf.d,自己根據(jù)實(shí)際情況調(diào)整。

# 創(chuàng)建一個配置文件
vi /home/docker/mysql/conf.d/mysql.cnf

將下面的內(nèi)容寫入 mysql.cnf 保存即可

[mysqld]
sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'

2、如果沒有做掛載需要將這個配置文件拷貝到容器內(nèi)(有做掛載跳過)

docker cp /home/docker/mysql/conf.d/mysql.cnf 容器ID:/etc/mysql/conf.d/mysql.cnf

3、重啟容器

docker restart 容器ID/容器名稱

4、檢驗(yàn)是否修改成功

# 進(jìn)入容器
docker exec -it 容器ID/容器名稱 /bin/bash
# 連接MySQL
mysql -h127.0.0.1 -uroot -p
# 查看sql_mode是否被修改成功
SHOW VARIABLES LIKE "sql_mode";

this is incompatible with sql_mode=only_full_group_by,運(yùn)維,數(shù)據(jù)庫,mysql,sql,linux,容器,docker文章來源地址http://www.zghlxwxcb.cn/news/detail-761494.html

到了這里,關(guān)于解決MySQL-this is incompatible with sql_mode=only_full_group_by 問題(提供window、Linux、docker解決方法和流程)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mod

    which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mod

    mysql 執(zhí)行報錯 : Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column ‘bcdsystem.cities.city’ which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by\\\" 1.這個錯誤發(fā)生在mysql 5.7 版本及以上版本會出現(xiàn)的問題: 2.在sql執(zhí)行時,出現(xiàn)

    2024年02月16日
    瀏覽(24)
  • The engine “node“ is incompatible with this module. Expected version 問題解決辦法

    The engine “node“ is incompatible with this module. Expected version 問題解決辦法

    安裝一個組件庫總是報錯: 手動右鍵刪除 node_modules 文件夾,清空了 npm 緩存: 發(fā)現(xiàn)還是不行。 后來在網(wǎng)上找到了解決方案:忽略錯誤。 終端輸入命令: 再重新安裝依賴,運(yùn)行項(xiàng)目就可以了:

    2024年02月12日
    瀏覽(22)
  • error @achrinza/node-ipc@9.2.5: The engine “node“ is incompatible with this module. 解決node.js版本不兼容問題

    error @achrinza/node-ipc@9.2.5: The engine “node“ is incompatible with this module. 解決node.js版本不兼容問題

    目錄 很多人運(yùn)行項(xiàng)目的時候會出現(xiàn)報錯信息: 解決方案 然后再次運(yùn)行就好了: 此時,我點(diǎn)擊鏈接就可以看到了: 很多人運(yùn)行項(xiàng)目的時候會出現(xiàn) 報錯信息: 這個錯誤是因?yàn)槟愕捻?xiàng)目中使用了一個模塊 @achrinza/node-ipc,它要求 Node.js 版本在 8 到 18 之間,但你的 Node.js 版本是

    2024年03月27日
    瀏覽(26)
  • The engine “node“ is incompatible with this module. Expected version

    The engine “node“ is incompatible with this module. Expected version

    vue項(xiàng)目用了yarn,yarn install后報錯如下: ** ** 執(zhí)行: 然后yarn install后成功。 在此記錄問題,如有需要修改的地方,還請不吝賜教。

    2024年02月12日
    瀏覽(20)
  • Spring MVC found on classpath, which is incompatible with Spring Cloud Gateway at this time.

    Spring MVC found on classpath, which is incompatible with Spring Cloud Gateway at this time.

    項(xiàng)目概述: ?問題解決: 步驟一:在關(guān)聯(lián)的兩個模塊zx-gateway-0829和zx-common-0829中尋找 spring-boot-starter-web ?步驟二:刪除gateway模塊pom.xml中關(guān)聯(lián)的commont模塊,將common中g(shù)ateway所需要的工具復(fù)制一份到gateway模塊對應(yīng)位置下。 嗨嘍,CSDN的友友們,今天啟動網(wǎng)關(guān)Gateway時發(fā)現(xiàn)了一個不兼

    2023年04月26日
    瀏覽(37)
  • 【Node Sass version 8.0.0 is incompatible with ^4.0.0.問題解決】

    【Node Sass version 8.0.0 is incompatible with ^4.0.0.問題解決】

    在微信小程序Vue搭建安裝依賴后,重新運(yùn)行項(xiàng)目出現(xiàn)錯誤: 此時無法繼續(xù)運(yùn)行項(xiàng)目。 觀察package.json可以發(fā)現(xiàn)版本對應(yīng)情況: https://www.npmjs.com/package/node-sass 先卸載后安裝對應(yīng)版本。 重新運(yùn)行后無報錯。

    2024年02月11日
    瀏覽(19)
  • 解決Deprecated Gradle features were used in this build, making it incompatible with Gradle 7.0.

    解決Deprecated Gradle features were used in this build, making it incompatible with Gradle 7.0.

    ??背景: 當(dāng)運(yùn)行代碼時出現(xiàn)下面的錯誤: ??解決方式: 刪除/android下的**.gradle 文件,然后重新運(yùn)行 npm run android**即可解決! ??親測:

    2024年02月11日
    瀏覽(21)
  • 解決Error: Node Sass version 8.0.0 is incompatible with ^4.0.0.

    解決Error: Node Sass version 8.0.0 is incompatible with ^4.0.0.

    最近升級了node版本,導(dǎo)致與node sass版本不一致,項(xiàng)目編譯失敗,參照網(wǎng)上把版本都升級一致了,但是還是沒有解決問題。 后來參考一位朋友的做法,解決了該問題,具體如下: npm uninstall sass-loader node-sass npm install sass-loader@8.0.2 sass@1.26.5 ?--save-dev 執(zhí)行命令的完成后 啟動項(xiàng)目

    2024年02月12日
    瀏覽(22)
  • Deprecated Gradle features were used in this build, making it incompatible with Gradle 8.0. 解決辦法

    今天編譯一個之前在家里打包的項(xiàng)目 然后發(fā)現(xiàn)公司的電腦編譯不過 問題如下 Deprecated Gradle features were used in this build, making it incompatible with Gradle 8.0. You can use \\\'--warning-mode all\\\' to show the individual deprecation warnings and determine if they come from your own scripts or plugins. See https://docs.gradle.org/

    2024年02月13日
    瀏覽(20)
  • Syntax Error: Error: Node Sass version x.x.x is incompatible with ^4.0.0.解決辦法

    Syntax Error: Error: Node Sass version x.x.x is incompatible with ^4.0.0.解決辦法

    Syntax Error: Error: Node Sass version 9.0.0 is incompatible with ^4.0.0. ?@ ./src/assets/css/global.scss 4:14-235 15:3-20:5 16:22-243 ?@ ./src/main.js ?@ multi (webpack)-dev-server/client?http://192.168.7.103:8081sockPath=/sockjs-node (webpack)/hot/dev-server.js ./src/main.js 代碼如下(示例): 1 代碼如下(示例):

    2024年02月12日
    瀏覽(19)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包