錯誤 1055 ONLY FULL GROUP by something 不在 GROUP BY 子句中

很長一段時間以來,MySQL 已經包含了一個臭名昭著的非標準擴充套件到 GROUP BY,它允許以效率的名義進行古怪的行為。這個擴充套件允許世界各地的無數開發人員在生產程式碼中使用 GROUP BY 而不完全理解他們在做什麼。

特別是,在 GROUP BY 查詢中使用 SELECT *是個壞主意,因為標準的 GROUP BY 子句需要列舉列。不幸的是,許多開發人員都這樣做了。

讀這個。 https://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html

MySQL 團隊一直試圖修復這種錯誤,而不會弄亂生產程式碼。他們在 5.7.5 中新增了一個名為 ONLY_FULL_GROUP_BYsql_mode 標誌來強制標準行為。在最近的版本中,他們預設開啟了該標誌。當你將本地 MySQL 升級到 5.7.14 時,標誌已開啟,你的生產程式碼(取決於舊擴充套件程式)停止工作。

如果你最近開始收到 1055 個錯誤,你有什麼選擇?

  1. 修復有問題的 SQL 查詢,或讓他們的作者去做。
  2. 使用你使用的應用程式軟體回滾到與開箱即用的 MySQL 相容版本。
  3. 更改伺服器的 sql_mode 以擺脫新設定的 ONLY_FULL_GROUP_BY 模式。

你可以通過執行 SET 命令來更改模式。

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 安裝中找到 init 檔案 ,找到 sql_mode= 行,並將其更改為省略 ONLY_FULL_GROUP_BY,然後重新啟動伺服器。