執行sql查詢時,服務器上報錯。sql
錯誤緣由:在MySQL5.7以後,sql_mode中默認存在ONLY_FULL_GROUP_BY,SQL語句未經過ONLY_FULL_GROUP_BY語義檢查因此報錯。數據庫
個人查詢語句要實現的功能是要篩選出全部單據中最後一次更新的數據,根據單據編碼group by,再經過編碼和更新時間來order by,本地就沒問題,服務器上直接報錯。服務器
緣由是:編碼
執行此條語句:select @@sql_mode;spa
發現本地是空的,而服務器上顯示:class
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配置
發現這些都是數據庫自己的驗證功能。select
而ONLY_FULL_GROUP_BY規定:出如今select中的全部字段都要出如今group by後面。程序
修改方式:數據
1.set GLOBAL sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION ';
2.由於服務器通常限制都會比較嚴格,若是dba不一樣意修改此處的全局配置的話,就只能在程序中修改成會話級別的配置了。
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 ';
而後再執行查詢語句。