您的位置:首页 > 数据库 > MySQL

MYSQL升级后GROUP BY语句出错解决方法

2017-08-20 00:11 218 查看
引言

解决

查询mysql服务器版本

查看sql_mode

修改sql_mode

参考

引言

实践Qt+MySQL的小项目《餐饮信息服务系统》中,使用

select cid,cname,count(fname) from foodorder.orderlist group by cid


报错:

数据库查询出错:Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'foodorder.orderlist.cname' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by QMYSQL: Unable to execute query




解决

MySQL 5.7默认的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, and NO_ENGINE_SUBSTITUTION


升级MYSQL5.7是为了更好的性能,据我猜测,MYSQL5.7对sql_mode的限制,也是为了更好的查询性能。所以如果在开发阶段,如果要使用mysql5.7版本建议大家阅读一下5.7的文档,然后将自己的sql写的更严谨,尽量少用select * ,只查出自己想要的数据列即可。

mysql 5.6,居然可以不像oracle那样,group by中的列一定要出现在select中,除非强制sqlmode中使用ONLY_FULL_GROUP_BY,但5.7中好像默认使用ONLY_FULL_GROUP_BY了

查询mysql服务器版本

select @@version;


查看sql_mode

SELECT @@sql_mode;
select @@GLOBAL.sql_mode;
select @@SESSION.sql_mode;


修改sql_mode

SET GLOBAL sql_mode = '';




set @@sql_mode='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

MYSQL升级5.7.10后GROUP BY语句出错解决方法

[mysql] Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column ‘loser.tank_admin.login_ip’ which is not functionally dependent on columns in GROUP BY clause; this is
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mysql