在Ubuntu/Linux環境下使用MySQL:修改數據庫sql_mode,可解決“this is incompatible with sql_mode=only_full_group_by”問題

操作系統:Ubuntu 18.04 64位

MySQL版本:MySQL 5.7

一、問題描述

在本次發現的這個問題中,其原因是業務系統在對某張數據庫表進行查詢的時候,對查詢結果做了group by操作,並且根據業務數據的記錄創建時間進行了排序。

在執行查詢的時候,MySQL就會拋出一條錯誤:

this is incompatible with sql_mode=only_full_group_by

由於在大部分業務系統中,對記錄的創建時間排序是非常常見的操作方式,但是很少會將記錄的創建時間放入group by子句中,這樣group by就失去了意義。所以我們不能選擇修改SQL查詢語句來解決這一問題。

二、問題原因

引發這一問題的原因非常簡單,由於在MySQL5.7及以上版本,默認在數據庫服務的sql_mode設置中,增加了以下配置:

ONLY_FULL_GROUP_BY

就是這一設置導致了問題的發生。在MySQL5.7及以上版本中,當數據庫安裝完成後,sql_mode的這一設置就默認生效了。我們可以通過以下差需語句來確認自己當前數據庫中的sql_mode配置:

select @@GLOBAL.sql_mode;

查詢的結果如下所示,這是已經完成了修改後的配置,其中已經看不到ONL_FULL_GROUP_BY的配置項了。:

三、解決辦法

3.1修改my.cnf配置文件

在Linux環境下,my.cnf配置文件位於系統etc目錄下:

在上圖的示例中,“my.cnf“被指向了位於目錄“/etc/alternatives”下的同名文件,因此我們需要轉到該目錄下,並打開該文件:

然後在文件的末尾,輸入以下內容:

[mysqld]
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服務即可。

傳送門:在Ubuntu/Linux環境下使用MySQL:啓動和關閉MySQL服務

注意:在修改my.cnf文件前,請將它妥善備份。如果修改完畢後,無法正常啓動MySQL服務,請恢復該文件後重新嘗試。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章