服務器環境:windows server 2012 R2、mysql5.7.17
出現問題:在本地開發環境下一切正常,部署到服務器上出現GROUP BY 的聚合函數錯誤,如下:
select id, name from user group by name 錯誤;
select id, name from user group by id,name 正確;
問題原因:經過排查找到原因,在MySQL5.7之后,sql_mode配置中默認存在ONLY_FULL_GROUP_BY,
SQL語句未通過ONLY_FULL_GROUP_BY語義檢查所以報錯;
解決過程:很好理解,只要成功修改MySQL的sql_mode配置就可以了。
1.查看當前sql_mode配置情況: SELECT @@sql_mode 如下:
2.修改sql_mode,推薦用第二種方式
方式一:使用命令 ,但是治標不治本,重啟MySQL服務此設置就失效;
set @@sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
方式二: 打開my.ini文件(若沒有的話點這里試試),找到sql_mode,去掉ONLY_FULL_GROUP_BY,
若沒有sql_mode,則在最后增加 sql_mode=STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
然后重啟服務