php

mysql报错记录:ERROR 1055 (42000): sql_mode = only_full_group_by不兼容

dafenqi
2023-11-30 / 0 评论 / 20 阅读 / 正在检测是否收录...

ERROR 1055 (42000): sql_mode = only_full_group_by不兼容

mysql> select sum(id),name from student group by name;
+---------+--------+
| sum(id) | name   |
+---------+--------+
|       1 | 张三   |
|       2 | 尔四   |
|       3 | 小红   |
|      10 | 小明   |
|       5 | 小青   |
+---------+--------+
5 rows in set (0.00 sec)

mysql> select sum(id),name,code from student group by name;
ERROR 1055 (42000): Expression #3 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'test.student.code' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

错误描述:

“错误代码:1055,SELECT列表的表达式 #1 不在GROUP BY子句中,并且包含非聚合列’test.student.code’,它在功能上不依赖于GROUP BY子句中的列; 这与sql_mode = only_full_group_by不兼容”

分析问题

1)原理层面

这个错误会发生在mysql 5.7 版本及以上版本mysql 5.7版本以上默认的sql配置是:sql_mode=“ONLY_FULL_GROUP_BY”,这个配置严格执行了"SQL92标准"。
很多程序员从5.6升级到5.7时,为了语法兼容,大部分会选择调整sql_mode,使其保持跟5.6一致,为了尽量兼容程序。

2)sql层面

在sql执行时,出现该原因,简单来说就是:

由于开启了ONLY_FULL_GROUP_BY的设置,如果select 的字段不在 group by 中,
并且select 的字段未使用聚合函数(SUM,AVG,MAX,MIN等)的话,那么这条sql查询是被mysql认为非法。
0

Deprecated: strtolower(): Passing null to parameter #1 ($string) of type string is deprecated in /www/wwwroot/testblog.58heshihu.com/var/Widget/Archive.php on line 1032

评论 (0)

取消