下載安裝的是最新版的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 |
|
查詢出來的值爲:
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 |
|
3、上面是改變了全局sql_mode,對於新建的數據庫有效。對於已存在的數據庫,則需要在對應的數據下執行:
1 |
|
解決辦法大致有兩種:
一:在sql查詢語句中不需要group by的字段上使用any_value()函數
這種對於已經開發了不少功能的項目不太合適,畢竟要把原來的sql都給修改一遍
二:修改my.cnf(windows下是my.ini)配置文件,刪掉only_full_group_by這一項
若我們項目的mysql安裝在ubuntu上面,找到這個文件打開一看,裏面並沒有sql_mode這一配置項,想刪都沒得刪。
當然,還有別的辦法,打開mysql命令行,執行命令
1 |
|
這樣就可以查出sql_mode的值,複製這個值,在my.cnf中添加配置項(把查詢到的值刪掉only_full_group_by這個選項,其他的都複製過去):
1 |
|
如果 [mysqld] 這行被註釋掉的話記得要打開註釋。然後重重啓mysql服務
注:使用命令
1 |
|
這樣可以修改一個會話中的配置項,在其他會話中是不生效的。
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.
一個人一生可以愛上很多的人,等你獲得真正屬於你的幸福之後,你就會明白一起的傷痛其實是一種財富,它讓你學會更好地去把握和珍惜你愛的人。