记录一下mysql8.0 的sql_mode = only_full_group_by与存储过程sql_mode = only_full_group_by的问题

问题:我是用mysql8.0后,是用分组查询sql_mode = only_full_group_by

出现问题的原因

mysql 5.7版本以后的sql配置是:sql_mode=“ONLY_FULL_GROUP_BY”,这个配置严格执行了"SQL92标准",所以导致group by无法正常执行。

解决办法

第一种方式

使用navicat连接mysql,输入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
把除去ONLY_FULL_GROUP_BY以后剩下的复制,如下:
TRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
然后输入sql-mode=‘STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION’
在输入show variables like ‘%sql_mode’;
可以看到信息中已经没有ONLY_FULL_GROUP_BY了。
这是已经暂时解决了这个问题,但是这种方式在mysql重启之后会失效!

第二种方式

打开my.ini 在[mysqld]下面添加sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION’
然后重启mysql,这样就是永久性想解决该问题

然后我还遇到的问题,是我调用自己写的存储过程也会出现这个问题,但是把存储过程里的sql拷贝出来执行是没有问题的。这个原因是因为存储过程是在sql_model为ONLY_FULL_GROUP_BY下创建的,mysql创建或更改例程时,MySQL将存储有效的sql_mode系统变量设置,并且始终在执行该设置的情况下执行该例程,而与例程开始执行时当前的服务器SQL模式无关。

所以我们需要重新创建该存储过程就可以了。参考:http://codingdict.com/questions/22392

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值