Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'userinfo
說明情況: 首先我是在Linux伺服器上新裝了一個mysql , 原先版本為5.7.22 , 現在不小心裝成了5.7.16 , 專案啟動是時候跳轉首頁不顯示資料 , 後臺開始報錯 :
如下 , 具體錯誤bug忘了複製截圖 , 只保留了標題和下面這兩行百度的內容 , 屬於bug原因
Expression #1 of ORDER BY clause is not in SELECT list, references column 'advplatform.t1.order_num' which is not in SELECT list; this is incompatible with DISTINCT
原因是 5.7.5之後版本預設啟用了only_full_group_by SQL模式,所以MySQL會不識別選擇列表、條件或順序列表引用的查詢 ,
以下是自己解決問題的步驟:
1. 開啟xshell , 連線上對應的Linux伺服器 , 可直接在根目錄中輸入 mysql -uroot -p123456 注: (root 是mysql服務的賬號 , -p後面的123456是mysql的密碼 , 兩者視個人配置更改 , - 前需要空格 u 和 p 連線的賬號密碼不需要空格: )
此時進入mysql命令符模式
2. 輸入SHOW SESSION VARIABLES; 命令列 , 我自己試了下小寫 , 不知道為什麼不行 , 還是老實的大寫了 , 回車後會彈出很多的資料 , 你從中找到 sql_mode
如果 其中存在ONLY_FULL_GROUP_BY; 的話 , 就要修改這個屬性的內容 , 具體為什麼請恕在下不知道了 , 修改的時候輸入
set session sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'; ( 不知道為什麼 , 那個set 單詞和session 離的很遠 , 小夥伴們複製小心)
執行成功後再像剛剛那樣查詢一下看看屬性是否改變 , 如改變成自己set的內容即算成功 ;
3. 還有一個屬性要修改 SHOW GLOBAL VARIABLES; 其操作步驟與 2 絲毫不差 , 可照搬操作
確認修改完成後 , 重啟專案 , 可以執行 , bug 消失 ;
最後 , 喜大普奔 , 撒花花 .......