背景
程序在線上版本運行沒有問題,在本地運行卻出現(xiàn)SQL錯誤,錯誤中提到了“sql_mode=only_full_group_by”,再一聯(lián)想,本地環(huán)境只有數(shù)據庫版本不同,所以便知道了問題所在。
解決
1.分別查看本地和線上數(shù)據庫的sql_mode
select @@GLOBAL.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
生產: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
2.修改本地庫sql_mode
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';
原因
mysql 5.7版本默認的配置包含:sql_mode="ONLY_FULL_GROUP_BY",這個配置嚴格執(zhí)行了"SQL92標準"。很多從5.6升級到5.7時(實際上我的數(shù)據庫版本是),為了語法兼容,大部分都會選擇調整sql_mode,使其保持跟5.6一致,為了盡量兼容程序。