mysql5.7 only_full_group_by_Mysql5.7及以上版本 ONLY_FULL_GROUP_BY報錯的解決方法

de647c02a396977619bd098b86c54b45.png

近期在開發過程中,因為項目開發環境連接的mysql數據庫是阿里云的數據庫,而阿里云的數據庫版本是5.6的。而測試環境的mysql是自己安裝的5.7。因此在開發過程中有小伙伴不注意寫了有關group by的sql語句。在開發環境中運行是正常的,而到了測試環境中就發現了異常。

原因分析:MySQL5.7版本默認設置了 mysql sql_mode = only_full_group_by 屬性,導致報錯。

其中ONLY_FULL_GROUP_BY就是造成這個錯誤的罪魁禍首了,對于group by聚合操作,如果在select中的列沒有在group by中出現,那么這個SQL是不合法的,因為列不在group by從句中,所以設置了sql_mode=only_full_group_by的數據庫,在使用group by時就會報錯。

測試環境下載安裝的是最新版的mysql5.7.x版本,默認是開啟了 only_full_group_by 模式的,但開啟這個模式后,原先的 group by 語句就報錯,然后又把它移除了。

一旦開啟 only_full_group_by ,感覺,group by 將變成和 distinct 一樣,只能獲取受到其影響的字段信息,無法和其他未受其影響的字段共存,這樣,group by 的功能將變得十分狹窄了

only_full_group_by 模式開啟比較好。因為在 mysql 中有一個函數: any_value(field) 允許,非分組字段的出現(和關閉 only_full_group_by 模式有相同效果)。

1、查看sql_mode

SELECT @@sql_mode;

查詢出來的值為:

ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

2、去掉ONLY_FULL_GROUP_BY,重新設置值。

SET @@global.sql_mode ="STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION";

3、上面是改變了全局sql_mode,對于新建的數據庫有效。對于已存在的數據庫,則需要在對應的數據下執行

SET sql_mode ="STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION";

以上方法mysql數據庫重啟后依然無效,下列方式重啟后依然生效

找到MySQL的配置文件,在linux系統上/etc/my.cnf文件,查詢sql_mode字段,我并沒有在配置文件中找到這個關鍵字,所以我手動添加進去:

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

需要注意的一點是一定要添加在[mysqld]配置內,這樣添加完后重啟mysql才會生效,退出數據庫:exit,重啟命令:

service mysqld restart

刷新頁面報錯信息消失成功解決,再次連接上數據庫查看sql_mode配置select @@sql_mode:

STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

到此這篇關于Mysql5.7及以上版本 ONLY_FULL_GROUP_BY報錯的解決方法的文章就介紹到這了,更多相關Mysql5.7 ONLY_FULL_GROUP_BY內容請搜索云海天教程以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持云海天教程!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/287746.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/287746.shtml
英文地址,請注明出處:http://en.pswp.cn/news/287746.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

一款高速的NET版的離線免費OCR

PaddleOCR.Onnx一款基于Paddle的OCR,項目使用ONNX模型,速度更快。本項目同時支持X64和X86的CPU上使用。本項目是一個基于PaddleOCR的C代碼修改并封裝的.NET的工具類庫。包含文本識別、文本檢測、基于文本檢測結果的統計分析的表格識別功能,同…

spring 注解簡單使用

一、通用注解 1、項目結構: 2、新建Person類,注解Component未指明id,則后期使用spring獲取實例對象時使用默認id"person"方式獲取或使用類方式獲取 package hjp.spring.annotation.commen;import org.springframework.stereotype.C…

selenium+python筆記3

#!/usr/bin/env python # -*- coding: utf-8 -*- """ desc:學習unittest的用法 注意setUp/setUpClass,tearDown/tearDownClass的區別 ① setUp():每個測試函數運行前運行 ② tearDown():每個測試函數運行完后執行 ③ setUpClass():必須使用classmeth…

【學生選課系統經典】C#與SQLSERVER連接:ASP.NET網站(服務器端,IIS發布)

實驗任務描述 1 用C#訪問SQLSERVER數據庫(兩種安全模式); 2 用C#完成數據庫指定表上的數據顯示; 3 用C#完成數據庫指定表上的數據插入、刪除和更新; 4 用C#完成數據庫用戶驗證。 此處使用ASP.NET工程來完成這個項目,和Windows應用不同的是:這個項目是在服務器上、依靠IIS服…

TCP包頭、UDP包頭、IP包頭、和MAC幀包頭詳細字段和包頭大小

1 TCP頭 TCP是一種可靠的、面向連接的字節流服務,頭部定義如下。 /*TCP頭定義,共20個字節*/ typedef struct _TCP_HEADER {short m_sSourPort;       // 源端口號16bitshort m_sDestPort;       // 目的端口號16bitunsigned int m_uiSequNum; …

經典面試題:用戶反映你開發的網站訪問很慢可能會是什么原因

原文鏈接:http://blog.csdn.net/lv_victor/article/details/53148421 問題場景:某個用戶向你反映說你開發的網站訪問速度很慢,但是該用戶訪問其他問題很正常,分析下原因、有哪些工具分析原因、怎么解決問題? 最近面試兩…

《假如編程是魔法之零基礎看得懂的Python入門教程 》——(三)使用初始魔法跟編程魔法世界打個招呼吧

學習目標 完成顯示魔法的使用——輸出print完成傳入魔法的使用——輸入input使魔法生效——運行python文件 目錄 第一篇:《假如編程是魔法之零基礎看得懂的Python入門教程 》——(一)既然你選擇了這系列教程那么我就要讓你聽得懂 第二篇&am…

查缺補漏系統學習 EF Core 6 (一)

推薦關注「碼俠江湖」加星標,時刻不忘江湖事掌握 ORM 開發方式是每一個 .NET 開發者所必備的技能,而且 .NET 平臺有很多優秀的 ORM 框架。很多人都會詬病 .NET 官方標配的 Entity Framework,感覺其笨重難用、性能低下。但其實經過多年發展&am…

mysql 5.5 mysqldump_mysql 5.5 mysqldump 原文翻譯

根據mysql 5.5第6.4章節理解和自己翻譯水平有限如有紕漏請指教,原文如下.6.4 使用mysqldump備份(Using mysqldump for Backups)首先多余的不用說了備份用來干什么大家都清楚。mysqldump備份分兩種輸出形式:1. 無--tab選項,輸出標準的SQL格式。輸出包含CR…

【經典回放】JavaScript學習詳細干貨筆記之(一)

【經典回放】JavaScript學習詳細干貨筆記之(一) 【經典回放】JavaScript學習詳細干貨筆記之(二) 【經典回放】JavaScript學習詳細干貨筆記之(三) 目錄 一、為什么要學JavaScript 二、JavaScript經典案例 …

Java Attach API

catalog 1. instrucment與Attach API 2. BTrace: VM Attach的兩種方式 3. Sun JVM Attach API 1. instrucment與Attach API JDK5中增加了一個包java.lang.instrucment,能夠對JVM底層組件進行訪問。在JDK 5中,Instrument 要求在運行前利用命令行參數或者系…

TCP之三次握手和四次揮手過程

1 TCP包頭里面的標志位 下圖為TCP頭部里面部分信息,入下標志位,每個標志位占一位。 標志位這里會涉及3個,ACK SYN FIN ACK:確認序號有效。 SYN:發起一個新連接。 FIN:釋放一個連接。 2 三次握手過程 第一次握手 Client將標志位SYN置1,隨機產生一個值seq=J,并將數…

Handler 機制分析

android 子線程和UI線程的交互主要使用Handler的方法進行通信。本文分析Handler機制 Handler 如何使用? Handler的使用比較簡單 public class MainActivity extends Activity{private Handler handler new Handler() { public void handleMessage(Message msg) { …

gearman mysql編譯_gearman初探(一、編譯和安裝)

gearman是一個任務分發系統,將計算比較耗時的任務分發給不同的機器專門進行計算,而任務發起的初始程序不必等待這些任務完成就可以返回而繼 續執行。筆者最開始做PHP郵件發送的時候,因為郵件發送耗時比較長,這時PHP腳本就會被阻塞…

《假如編程是魔法之零基礎看得懂的Python入門教程 》——(四)了解魔法百寶箱列表、字典及基本數據類型

學習目標 了解魔法世界中可更改容器——變量了解魔法世界的基本數值類型——字符串、整數了解魔法百寶箱——字典、列表了解列表如何添加值了解字典如何添加值了解字典與列表定義的不同符號 目錄 第一篇:《假如編程是魔法之零基礎看得懂的Python入門教程 》——&…

TCP協議之如何保證傳輸的可靠性

一、問題 TCP協議之如何保證傳輸的可靠性?我們先看下TCP的頭部圖片和TCP頭部的字段 /*TCP頭定義,共20個字節*/ typedef struct _TCP_HEADER {short m_sSourPort;       // 源端口號16bitshort m_sDestPort;       // 目的端口號16bitunsigned int …

【工具篇】在Mac上開發.Net Core需要的工具

微信公眾號:趣編程ACE關注可了解更多的.NET日常開發技巧,如需幫助,請后臺留言;[如果覺得本公眾號對您有幫助,歡迎關注]在Mac上開發.Net Core需要的工具如果您是一個.NET 開發者,想從Windows切換到Mac上開發.NET或者您已…

【Pix4d精品教程】Pix4Dmapper完整航測內業操作流程手把手圖文教程

1. 作業流程圖 2. 原始資料準備 原始資料包括影像數據、POS數據以及控制點數據。 確認原始數據的完整性,檢查獲取的影像中有沒有質量不合格的相片。同時查看POS數據文件,主要檢查航帶變化處的相片號,防止POS數據中的相片號與影像數據相片號不對應,出現不對應情況應手動調…

關于構造函數和this調用的思考

文中一系列思考和內容引發自以下問題:我需要在一個類的構造函數中調用另一個對象的構造函數,并使用this初始化其中的一個引用成員。 主要遇到的問題: 1. 構造函數的初始化列表中能訪問this嗎? 很明顯c創建一個對象分為兩部分&…

mysql semi join_MySQL 5.6 Semi join優化之materialization strategy

8月 24, 2014 |Nix.Huang考慮如下查詢:select * from Countrywhere Country.code IN (select City.Countryfrom Citywhere City.Population > 7*1000*1000)and Country.continentEurope這個子查詢是非相關子查詢,我們能和外層循環獨立的執行它&#x…