mysql排坑指南--实时更新

Mysql5.7 GROUP BY 报错

把sql_mode 改成非only_full_group_by模式。验证是否生效 SELECT @@GLOBAL.sql_mode 或 SELECT @@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';

group by 提示警告问题

警告信息

com.MySQL.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'col_user_6.a.START_TIME' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

原因:

​ sql_mode 默认设置了 ‘ONLY_FULL_GROUP_BY’

查询时为严谨模式,除了group by字段以外的字段无法查询

查询sql_mode

select @@global.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_model 方式 去掉ONLY_FULL_GROUP_BY 即可

set @@global ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'

重启数据库. windows 没有重启命令直接关闭数据库重启即可

net stop mysql
net start mysql

set @global.sql_mode只对新建的库生效,对已经建好的库可以使用 set @sql_mode

该方案的弊端是 数据库重启还是会回复到默认sql_mode。。。

解决方案二

修改配置文件 mysql数据库安装路径下的my.ini

[mysqld]
sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'

如果my.ini 中已经有了sql_mode,只需将 ‘ONLY_FULL_GROUP_BY’删掉即可。该项配置一定要是在[mysqld]下

重启数据库. windows 没有重启命令直接关闭数据库重启即可

net stop mysql
net start mysql

1、此次我使用的是win7系统,数据库采用的压缩包安装,my.ini文件是自己建立的,我已经开启了后缀名显示,但是win7系统默认勾选了 对已知文件类型隐藏后缀名,新建的my.ini 一定要看一下他的属性是不是my.ini 还是my.ini.txt

转载于:https://www.cnblogs.com/jokerBi/p/11208361.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值