• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    Mysql5.7及以上版本 ONLY_FULL_GROUP_BY报错的解决方法

    近期在开发过程中,因为项目开发环境连接的mysql数据库是阿里云的数据库,而阿里云的数据库版本是5.6的。而测试环境的mysql是自己安装的5.7。因此在开发过程中有小伙伴不注意写了有关group by的sql语句。在开发环境中运行是正常的,而到了测试环境中就发现了异常。

    原因分析:MySQL5.7版本默认设置了 mysql sql_mode = only_full_group_by 属性,导致报错。

    其中ONLY_FULL_GROUP_BY就是造成这个错误的罪魁祸首了,对于group by聚合操作,如果在select中的列没有在group by中出现,那么这个SQL是不合法的,因为列不在group by从句中,所以设置了sql_mode=only_full_group_by的数据库,在使用group by时就会报错。

    测试环境下载安装的是最新版的mysql5.7.x版本,默认是开启了 only_full_group_by 模式的,但开启这个模式后,原先的 group by 语句就报错,然后又把它移除了。

    一旦开启 only_full_group_by ,感觉,group by 将变成和 distinct 一样,只能获取受到其影响的字段信息,无法和其他未受其影响的字段共存,这样,group by 的功能将变得十分狭窄了

    only_full_group_by 模式开启比较好。因为在 mysql 中有一个函数: any_value(field) 允许,非分组字段的出现(和关闭 only_full_group_by 模式有相同效果)。

    1、查看sql_mode

    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

    2、去掉ONLY_FULL_GROUP_BY,重新设置值。

    SET @@global.sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
    

    3、上面是改变了全局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';
    

    以上方法mysql数据库重启后依然无效,下列方式重启后依然生效

    找到MySQL的配置文件,在linux系统上/etc/my.cnf文件,查询sql_mode字段,我并没有在配置文件中找到这个关键字,所以我手动添加进去:

    sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

    需要注意的一点是一定要添加在[mysqld]配置内,这样添加完后重启mysql才会生效,退出数据库:exit,重启命令:

    service mysqld restart

    刷新页面报错信息消失成功解决,再次连接上数据库查看sql_mode配置select @@sql_mode:

    STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

    到此这篇关于Mysql5.7及以上版本 ONLY_FULL_GROUP_BY报错的解决方法的文章就介绍到这了,更多相关Mysql5.7 ONLY_FULL_GROUP_BY内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

    您可能感兴趣的文章:
    • mysql 8.0.24版本安装配置方法图文教程
    • MySQL8.0.24版本Release Note的一些改进点
    • mysql的MVCC多版本并发控制的实现
    • MySQL8.0.23版本的root密码重置最优解法
    • 关于MyBatis连接MySql8.0版本的配置问题
    • 解决seata不能使用mysql8版本的问题方法
    • 详解DBeaver连接MySQL8以上版本以及解决可能遇到的问题
    • IDEA使用mybatis-generator及配上mysql8.0.3版本遇到的bug
    • MySQL5.x版本乱码问题解决方案
    • CentOS7版本安装Mysql8.0.20版本数据库的详细教程
    • 解决mysql8.0.19 winx64版本的安装问题
    • django2.2 和 PyMySQL版本兼容问题
    • Linux下二进制方式安装mysql5.7版本和系统优化的步骤
    • mysql 8.0.18各版本安装及安装中出现的问题(精华总结)
    • 超详细教你怎么升级Mysql的版本
    上一篇:Mysql事务隔离级别原理实例解析
    下一篇:mysql8.0.19基础数据类型详解
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    Mysql5.7及以上版本 ONLY_FULL_GROUP_BY报错的解决方法 Mysql5.7,及,以上,版本,ONLY,