在解决这个问题前,先说一下sql_mode是什么?它是一组mysql的语法校验规则,这个错误的原因基本就是你写的sql语句不符合ONLY_FULL_GROUP_BY规则,只需要设置一下sql_mode,在sql_mode中去掉ONLY_FULL_GROUP_BY这个规则。
我看了很多教程,步骤繁多,且不能解决问题,重启MySQL后sql_mode还是没变。我推荐大家都去改一下MySQL的配置,这样就能一劳永逸了。
在MySQL安装目录下,找到my.ini文件打开文件,设置sql_mode。
# 设置模式
[mysqld]
sql_mode=ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER
复制上面的内容,保存文件,重启MySQL即可。
-- 查询当前sql_mode
select @@global.sql_mode;
重启后可以使用上面的sql语句,看看sql_mode是不是你设置的,是的话就代表sql_mode设置成功了。
注意:[mysqld]一定不能省略,否则可能会不生效。
上文提到的sql_mode仅仅提供参考,这是我自己的配置,大家可以根据自己的需求配置不同的规则。其实,这个问题的解决就是去掉ONLY_FULL_GROUP_BY规则就行了。
如果大家想要多了解一些sql_mode,可以看看这篇文章mysql的sql_mode合理设置。