在MySQL使用group by时会出现错误
mysql版本:mysql-8.0.25-winx64
在mysql使用group by语句时会出现模式不匹配问题:
原因:MySQL实现了对功能的依赖检测。默认情况下,MySQL启动了nly_full_group_by SQL模式,此时,MySQL拒绝选择列表、条件或顺序列表引用的查询。
1.查看mysql的模式
select @@sql_mode;
2.修改
(1)在navicat里修改
新建一个查询,输入以下内容:
#select @@sql_mode;
#ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
set global sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
set session sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
select @@sql_mode;
#STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
可以看到,修改后已经没有了ONLY_FULL_GROUP_BY,重启navicat再运行就可以了。
PS:查到的很多方法修改的模式为:
sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
因为MySQL8取消了NO_AUTO_CREATE_USER,所以会报错:
删掉NO_AUTO_CREATE_USER就可以了。
(2)在navicat里面修改,重启之后可能会还原,可以直接修改配置文件
在mysql安装根目录下,找到my.ini文件,在末尾加上:
[mysqld]
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION