mysql 报错 this is incompatible with sql_mode=only_full_group_by

 解决在 mysql 中使用 group by 无效报错 SQLSTATE[42000]: Syntax error or access violation: 1055 Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column 'xxxx' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
mysql 报错 this is incompatible with sql_mode=only_full_group_by

问题分析

 出现这个问题一般一下问题导致的

  1. mysql 8.0 及以上版本
  2. sql_mode 启用了 only_full_group_by
  3. 查询字段中或者排序字段中出现了不存在 group by 的字段

解决方案

select 中使用 ANY_VALUE 聚合函数

SELECT name, ANY_VALUE(address), MAX(age) FROM t GROUP BY name;
  • 官方解读

此函数对于ONLY_FULL_GROUP_BY SQL 模式下的查询很有用 已启用,适用于 MySQL 拒绝您知道的查询的情况 由于 MySQL 无法确定的原因而有效。函数 返回值和类型与返回值和 其参数的类型,但未检查函数结果 对于ONLY_FULL_GROUP_BY SQL 模式。GROUP BY

例如,如果 是非索引 列中,以下查询失败并启用ONLY_FULL_GROUP_BY:name

mysql 报错 this is incompatible with sql_mode=only_full_group_by

切换 sql_mode 模式

  • 通过临时 sql 临时生效
SET @@global.sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
SET sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
  • 通过 my.cnf 配置永久生效

 linux下修改mysql的my.cnf配置文件

vi /etc/my.cnf

mysql 报错 this is incompatible with sql_mode=only_full_group_by

给TA打赏
共{{data.count}}人
人已打赏
运维

PHP常见机试题

2024-11-22 11:59:47

运维

阿里云redis数据库迁移工具RedisShake

2024-11-22 11:59:49

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索