报错信息
修改方式(全局)
-
找到mysql得my.cnf文件, 追加下方代码 (可以通过find / -name my.cnf找到文件路径)
sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION' -
刷新缓存, 输入下方命令, 回车后输入root密码即可
mysqladmin -u root -p flush-hosts -
启动mysql, 我这里是通过systemctl来管理服务, systemctl start mysqld;
错误原因
mysql服务支持多个sql模式, 不同的模式支持不同的sql语法; mysql8版本默认配置的sql模式请参考连接的A3.7; (dev.mysql.com/doc/refman/…)
想必第一个sql模式一眼就看到 ONLY_FULL_GROUP_BY;
该模式大致意思为: select列不允许出现非聚合列;
SELECT o.custid, c.name, MAX(o.payment) FROM orders AS o, customers AS c WHERE o.custid = c.custid GROUP BY o.custid
结合上面的报错信息想必各位也明白了, 我们开发人员写的代码存在非聚合列导致这个报错;
这个时候我们只需要取消掉ONLY_FULL_GROUP_BY即可;
其他修改方式
- 启动MySQL服务时使用该选项 --sql-mode=“modes";
- 运行状态设置sql模式 SET GLOBAL sql_mode = 'modes' / SET SESSION sql_mode = 'modes'; 更详细信息请参考官方文档(dev.mysql.com/doc/refman/…)