`

MySQL5.7 group by新特性,报错1055

阅读更多

 

错误现象:

 

错误原因:mysql5.7中only_full_group_by这个模式是默认开启的 

 

  •  

项目中本来使用的是mysql5.6进行开发,切换到5.7之后,突然发现原来的一些sql运行都报错,错误编码1055,错误信息和sql_mode中的“only_full_group_by“有关,到网上看了原因,说是mysql5.7中only_full_group_by这个模式是默认开启的 
解决办法大致有两种: 
一:在sql查询语句中不需要group by的字段上使用any_value()函数 
当然,这种对于已经开发了不少功能的项目不太合适,毕竟要把原来的sql都给修改一遍

二:修改my.cnf(windows下是my.ini)配置文件,删掉only_full_group_by这一项 
我们项目的mysql安装在ubuntu上面,找到这个文件打开一看,里面并没有sql_mode这一配置项,想删都没得删。 
当然,还有别的办法,打开mysql命令行,执行命令

select @@sql_mode
  • 1

这样就可以查出sql_mode的值,复制这个值,在my.cnf中添加配置项(把查询到的值删掉only_full_group_by这个选项,其他的都复制过去):

sql_mode=STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
  • 1

如果 [mysqld] 这行被注释掉的话记得要打开注释。然后重重启mysql服务

 

转载:http://blog.csdn.net/u283056051/article/details/52463948

 

 

 

 

  • 大小: 8 KB
分享到:
评论

相关推荐

    MySQL5.7 group by新特性报错1055的解决办法

    当遇到MySQL 5.7的`GROUP BY`新特性报错1055时,有以下两种常见的解决方法: 1. 修改SQL查询语句: 如果你的SQL语句中包含未在`GROUP BY`子句中列出但未使用聚合函数的列,可以使用`ANY_VALUE()`函数来指定任意一...

    MySQL5.7中的sql_mode默认值带来的坑及解决方法

    在正常项目开发过程中,如果MySQL版本从5.6升级到5.7...MySQL版本从5.6升级至5.7之后,部分SQL执行报错,报错信息如下: ERROR 1055 (42000): Expression #3 of XXXXXX list is not in GROUP BY clause and contain

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

    原因分析:MySQL5.7版本默认设置了 mysql sql_mode = only_full_group_by 属性,导致报错。 其中ONLY_FULL_GROUP_BY就是造成这个错误的罪魁祸首了,对于group by聚合操作,如果在select中的列没有在group by中出现,...

    解决大于5.7版本mysql的分组报错Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated

    理解`ONLY_FULL_GROUP_BY`模式的含义及其在MySQL 5.7及更高版本中的作用,可以帮助我们编写更准确和可靠的查询。在大多数情况下,遵循SQL标准是最佳实践,因为它能确保结果的正确性。然而,如果确实需要回退到旧的...

    mysql获取group by总记录行数的方法

    如果遇到`GROUP BY`新特性的报错,比如`1055`错误,你可能需要调整`sql_mode`设置或在查询中提供完整的分组表达式。 最后,注意`GROUP BY`和`HAVING`的使用区别。`GROUP BY`用于指定分组依据,而`HAVING`则是对分组...

    mysql不支持group by的解决方法小结

    当`ONLY_FULL_GROUP_BY`启用时,如果你的查询包含未在`GROUP BY`中列出的非聚合列,MySQL会报错,例如错误代码`1055`。这个模式的目的是防止因不确定的行选择导致的不一致结果。在旧版本的MySQL中,可能会返回任意行...

    MySql插入数据成功但是报[Err] 1055错误的解决方案

    在这个例子中,如果你试图将AVG(column3)的结果插入到column2,但column2不在GROUP BY子句中,MySQL 5.7将会抛出[Err] 1055错误,因为这不符合"ONLY_FULL_GROUP_BY"的规则。 为了解决这个问题,你可以修改MySQL的...

    MySql版本问题sql_mode=only_full_group_by的完美解决方案

    在MySQL 5.7及更高版本中,默认启用`ONLY_FULL_GROUP_BY`,这会导致一些在旧版本中可能运行正常的查询在新版本中报错。这是因为这些查询在没有明确指定分组依据的情况下使用了非聚合函数,这在SQL标准中是不允许的。...

    MySQL 5.6 Reference Manual

    Table of Contents Preface, Notes, Licenses . . . . . . . . ....1. Licenses for Third-Party Components ....1.1. FindGTest.cmake License ....1.2. LPeg Library License ....1.3. LuaFileSystem Library License ....

    解决laravel groupBy 对查询结果进行分组出现的问题

    但是,当 `select` 子句包含非聚合函数(如 `MAX`, `MIN`, `SUM` 等)之外的非分组字段时,MySQL 5.7 及更高版本会报错,因为它期望所有未聚合的列都在 `groupBy` 子句中列出。 **原因解析:** 在 MySQL 的 GROUP ...

    详解Mysql数据库date, datetime类型设置0000-00-00默认值(default)报错问题

    MySQL数据库在处理日期和时间类型时,如DATE和DATETIME,遇到了一个问题,即在MySQL 5.7版本之后,尝试将默认值设置为"0000-00-00"时会出现“Invalid default value for 'time'”的错误。这个问题的根源在于MySQL的`...

    浅析一个MYSQL语法(在查询中使用count)的兼容性问题

    从MySQL 5.7版本开始,服务器执行更严格的SQL模式,按照标准SQL规定,如果在`SELECT`列表中包含了非聚合函数(如`id`, `name`),而没有`GROUP BY`子句,那么除了`COUNT(*)`之外的所有聚合函数都必须与`GROUP BY`中...

    关于JDBC与MySQL临时表空间的深入解析

    在MySQL中,临时表空间是数据库管理系统用来处理短期数据存储的地方,尤其在进行复杂的查询操作如GROUP BY、JOIN等时,系统会自动创建临时表来辅助计算。 JDBC(Java Database Connectivity)是Java应用程序与...

    关于MySQL的sql_mode合理设置详解

    例如,MySQL 5.6默认的`sql_mode`较为宽松,而5.7则切换到了严格模式。在宽松模式下,错误的数据可能会被接受且不会报错,这可能导致潜在的数据质量问题。 在实际使用中,根据应用的需求和数据库的管理策略,应谨慎...

Global site tag (gtag.js) - Google Analytics