ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# mysql 5.7 groupby 近期在开发过程中,因为项目开发环境连接的mysql数据库是阿里云的数据库,而阿里云的数据库版本是5.6的。而测试环境的mysql是自己安装的5.7。因此在开发过程中有小伙伴不注意写了有关group by的sql语句。在开发环境中运行是正常的,而到了测试环境中就发现了异常。 原因分析:MySQL5.7版本默认设置了 mysql sql\_mode = only\_full\_group\_by 属性,导致报错。 其中ONLY\_FULL\_GROUP\_BY就是造成这个错误的罪魁祸首了,对于group by聚合操作,如果在select中的列没有在group by中出现,那么这个SQL是不合法的,因为列不在group by从句中,所以设置了sql\_mode=only\_full\_group\_by的数据库,在使用group by时就会报错。 测试环境下载安装的是最新版的mysql5.7.x版本,默认是开启了 only\_full\_group\_by 模式的,但开启这个模式后,原先的 group by 语句就报错,然后又把它移除了。 一旦开启 only\_full\_group\_by ,感觉,group by 将变成和 distinct 一样,只能获取受到其影响的字段信息,无法和其他未受其影响的字段共存,这样,group by 的功能将变得十分狭窄了 only\_full\_group\_by 模式开启比较好。因为在 mysql 中有一个函数: any\_value(field) 允许,非分组字段的出现(和关闭 only\_full\_group\_by 模式有相同效果)。 1、查看sql\_mode SELECT @@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 2、去掉ONLY\_FULL\_GROUP\_BY,重新设置值。 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'; 3、上面是改变了全局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'; 以上方法mysql数据库重启后依然无效,下列方式重启后依然生效 找到MySQL的配置文件,在linux系统上/etc/my.cnf文件,查询sql\_mode字段,我并没有在配置文件中找到这个关键字,所以我手动添加进去: sql\_mode = STRICT\_TRANS\_TABLES,NO\_ZERO\_IN\_DATE,NO\_ZERO\_DATE,ERROR\_FOR\_DIVISION\_BY\_ZERO,NO\_AUTO\_CREATE\_USER,NO\_ENGINE\_SUBSTITUTION 需要注意的一点是一定要添加在\[mysqld\]配置内,这样添加完后重启mysql才会生效,退出数据库:exit,重启命令: service mysqld restart 刷新页面报错信息消失成功解决,再次连接上数据库查看sql\_mode配置select @@sql\_mode: STRICT\_TRANS\_TABLES,NO\_ZERO\_IN\_DATE,NO\_ZERO\_DATE,ERROR\_FOR\_DIVISION\_BY\_ZERO,NO\_AUTO\_CREATE\_USER,NO\_ENGINE\_SUBSTITUTION ———————————————— 版权声明:本文为CSDN博主「澳宋殖民部部部长」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:[https://blog.csdn.net/weixin\_32445333/article/details/113187439](https://blog.csdn.net/weixin_32445333/article/details/113187439)