一、背景
ERROR 1055 (42000): Expression #7 of SELECT list is not in GROUP BY clause and contains nonaggregated column ‘postscan.verifyDelayLog.auditor’ which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
以上報錯資訊為寫 SQL 時,使用了 GROUP BY 導致報錯,這是因為在 MySQL 5.7 版本中,默認開啟了 only_full_group_by 模式,這也導致很多代碼在本地跑得好好的,一上線就報錯
對于 GROUP BY 聚合操作,如果在 SELECT 中的列,沒有在 GROUP BY 中出現,那么這個 SQL 是不合法的,因為列不在 GROUP BY 句中,所以對于設定了這個 mode 的資料庫,在使用 GROUP BY 的時候,就要用 MAX(),SUM(),ANT_VALUE() 這種聚合函式,才能完成 GROUP BY 的聚合操作,
二、解決方法
- 1、查看資料庫的 sql_mode
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
我們去掉 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
但是這樣只能解決后面新增的資料庫有效,已經存在的資料庫無效
還需要在已經存在的每個庫中執行:
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';
- 2、修改 MySQL 的組態檔 /etc/my.cnf,添加如下配置
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 即可
如您在閱讀中發現不足,歡迎留言!!!
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/167415.html
標籤:其他
上一篇:golang操作mysql用例
