1. 程式人生 > >Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'userinfo

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 消失 ;

最後 , 喜大普奔 , 撒花花 .......