出错情况

在这里插入图片描述

问题分析

出现此异常的原因是:如果启用了ONLY_FULL_GROUP_BY SQL模式(默认情况下),MySQL将拒绝选择列表,HAVING条件或ORDER BY列表的查询引用在GROUP BY子句中既未命名的非集合列,也不在功能上依赖于它们。

使用数据库的版本信息

mysql-8.0.15-winx64

解决策略

法 1
1 查看 sql_mode

1 使用以下命令查看自己的 sql_mode
select @@global.sql_mode; 或者 show variables like ‘sql_mode’;
可以看到查询出来的表格中会出现 ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
在这里插入图片描述
2 重设全局模式值
set@@global.sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
可以解决此问题,不过貌似这样的话可能只能解决一时,下面从配置文件方面进行配置,mysql 8.0以上取消了NO_AUTO_CREATE_USER这个关键字,如果是mysql 8.0 以下的则可以:sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION;
法2
1 找到 Mysql 文件夹下的 my.ini
在这里插入图片描述

2 先关闭 mysql

net stop mysql

3 修改 my.ini 文件

[mysqld]
# sql模式[解决:SELECT list is not in GROUP BY clause and contains nonaggregated column]问题
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

4 重启 mysql

net start mysql
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐