记一次group by报this is incompatible with sql_mode=only_full_group_by

 group by查询语句:

select fprojectid,fteamid,fprojectname,fdevmanage,ftestmanage,fcreateuser,fcreatetime,fupdatetime
from t_project group by fprojectid;

报错:

 然后我用的是Navicat premium 可视化工具。

查询mysql版本号:SELECT VERSION();

查询结果是5.7.20

查询SQL模式: 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

在可是化工具里面设置sql_mode:set @@sql_mode='NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES'

查询SELECT @@sql_mode; 看到结果修改成功了。

运行group by语句就没有报错。

但是我再重启Navicat,查看sql_mode看到我的sql_mode还是之前的,并没有修改成功。说明用命令修改参数,可能当前会话生效,可以全局生效;但是数据库重启之后都会失效。

于是想到去修改my.ini文件,在文件中加上sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

重启Navicat查询还是没有会报错。

于是尝试Windows DOS命令下使用root权限修改mysql的配置:

全局的这么设置:

set @@global.sql_mode='NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES'

重启mysql,发现sql_mode是否修改成功!

你再去Navicat 运行group by语句,终于没有报错了。

 

sql_mode的参数很多,有些是针对特殊场景的。

可以了解一下这些参数代表的意义。

ONLY_FULL_GROUP_BY:

       如果在SELECT中的列,没有在GROUP BY中出现,那么将认为这个SQL是不合法的。

       只能select column1 from tb1 group by column1,只能展示group by的字段,其他字段都报1055错。

STRICT_TRANS_TABLES :

       在该模式下,如果一个值不能插入到一个事务表中,则中断当前的操作,对非事务表不做任何限制。

NO_ENGINE_SUBSTITUTION: 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值