MySQL sql_mode=only_full_group_by錯誤


今天在測試服務器上突然出現了這么一個MySQL的問題,同樣的代碼正式服沒有問題,那肯定就是出在了配置上,查了一下原因才明白原來是數據庫版本為5.7以上的版本,默認是開啟了 only_full_group_by 模式的,但開啟這個模式后,原先的 group by 語句就報錯,

查詢MySQL版本可以在命令行模式剛連接上數據庫時就能看到,或者在進入mysql后使用命令:status查看版本號,既然是版本的問題,那就查詢一下配置看看具體的情況,命令行連接上數據庫,再輸入命令:

select @@sql_mode;

你會看到sql_mode的配置情況:

其中ONLY_FULL_GROUP_BY就是造成這個錯誤的罪魁禍首了,對於group by聚合操作,如果在select中的列沒有在group by中出現,那么這個SQL是不合法的,因為列不在group by從句中,所以設置了sql_mode=only_full_group_by的數據庫,在使用group by時就會報錯,既然知道了問題,那么修改這個配置就可以了,找到MySQL的配置文件,在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才會生效,退出數據庫:exit,重啟命令:

service mysqld restart;

刷新頁面報錯信息消失成功解決,再次連接上數據庫查看sql_mode配置select @@sql_mode:

到此已經成功解決了這個問題。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM