背景
在把代码部署到另一台服务器时,测试站没有问题的情况下,忽然sql爆了错,还是很吓人滴。具体完整的错误提示如下:
1055 - Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'zmw_jr1.360_imgs.id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
分析
发现mysql数据库是5.7的版本;根据错误提示可以看到,group by除了问题,具体的要求就是
select 中的所有字段都要出现在group by中,根据题目进行了操作。的确加到groupby中就解决了问题。
解决方案
但是不可能改变所有的groupby所以要从配置入手进行修改,如图:
修改了mysql的配置项,sql_mode参数,去掉了ONLY_FULL_GROUP_BY 这个参数就可以了。重启mysql。
结果如图:
问题就解决了。
再分析
为什么5.7版的数据库要修改为这样的配置?
具体理解是这样的很多家数据库,SQLServer,Oracle,PostgreSql都不支持“select target list”中出现语义不明确的列,所以他们认为这样的语句是会被报错的。