MYSQL5.7版本sql_mode=only_full_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 模式有相同效果)。

 

具體出錯提示:

[Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column 'information_schema.PROFILING.SEQ' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

1、查看sql_mode

01

select @@global.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,重新設置值。

01

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,對於新建的數據庫有效。對於已存在的數據庫,則需要在對應的數據下執行:

1

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';

  

解決辦法大致有兩種:

一:在sql查詢語句中不需要group by的字段上使用any_value()函數

這種對於已經開發了不少功能的項目不太合適,畢竟要把原來的sql都給修改一遍

二:修改my.cnf(windows下是my.ini)配置文件,刪掉only_full_group_by這一項

若我們項目的mysql安裝在ubuntu上面,找到這個文件打開一看,裏面並沒有sql_mode這一配置項,想刪都沒得刪。

當然,還有別的辦法,打開mysql命令行,執行命令

1

select @@sql_mode;

這樣就可以查出sql_mode的值,複製這個值,在my.cnf中添加配置項(把查詢到的值刪掉only_full_group_by這個選項,其他的都複製過去):

1

sql_mode=STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION;

如果 [mysqld] 這行被註釋掉的話記得要打開註釋。然後重重啓mysql服務

注:使用命令

1

set sql_mode=STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

這樣可以修改一個會話中的配置項,在其他會話中是不生效的。  

  

  

 


One may fall in love with many people during the lifetime. When you finally get your own happiness, you will understand the previous sadness is kind of treasure, which makes you better to hold and cherish the people you love.

一個人一生可以愛上很多的人,等你獲得真正屬於你的幸福之後,你就會明白一起的傷痛其實是一種財富,它讓你學會更好地去把握和珍惜你愛的人。

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