摘要:MySQL升級5.7以后經常會出現這種錯誤:[Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and co...
MySQL升級5.7以后經常會出現這種錯誤:
[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
雖然不影響SQL執行,但看起來總是不爽!
既然是版本的問題,那就查詢一下配置看看具體的情況,命令行連接上數據庫,輸入命令:
select @@sql_mode;
你會看到sql_mode的配置情況:
@@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就是造成這個錯誤的罪魁禍首了,
對于group by聚合操作,如果在select中的列沒有在group by中出現,那么這個SQL是不合法的,因為列不在group by從句中,所以設置了sql_mode=only_full_group_by的數據庫,在使用group by時就會報錯,
既然知道了問題,那么修改這個配置就可以了,找到MySQL的配置文件,Windows系統配置文件為安裝MySQL目錄下的my.ini文件,linux系統是/etc/my.cnf文件,查詢sql_mode字段,我并沒有在配置文件中找到這個關鍵字,所以我手動添加進去:
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才會生效,
重啟mysql:
service mysqld restart;
刷新頁面報錯信息消失成功解決,再次連接上數據庫查看sql_mode配置:
select @@sql_mode; @@sql_mode STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION