同一條sql在mysql5.6和5.7版本遇到的問題。


之前用的是mysql 5.6版本,執行select * from table group by colunm 是可以出結果的,

但是切換的5.7版本,這條sql就報錯,

Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column 'information_schema.xxxxx.SEQ' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

其實相對於語法來說,非聚集字段不能出現在查詢列表中,這條sql本身就是錯誤的,那么為什么5.6mysql可以執行呢?

找了好久發現是原來是sql mode的數據庫數據類型的問題。

5.7開始,mysql就開始嚴格遵從SQL 92規范,凡事沒有遵循規范的sql都不予執行,當然可以通過配置修改成5.6版本的值,但是本人不建議這么做。

 

可以通過sql查詢出當前sql mode值

 

select @@GLOBAL.sql_mode;-- 查詢全局值
select @@SESSION.sql_mode; -- 查詢當前會話值
5.7版本的值為: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
5.6版本的值為:STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION

 


免責聲明!

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



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