Mysql 1055 错误
PHP 下 Mysql 输出错误
try {
$result = $db->fetchAll($sql);
} catch (Exception $e) {
echo $e->getMessage();
}
1055 错误
SQLSTATE[42000]: Syntax error or access violation: 1055 Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'typecho.ty_comments.author' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
错误原因
- 在MySQL5.7之后sql_mode中默认存在ONLY_FULL_GROUP_BY,SQL语句未通过ONLY_FULL_GROUP_BY语义检查所以报错。
- ONLY_FULL_GROUP_BY:要求select语句中所查询出的列必须是在group by中进行声明,否则就会报错。
解决办法
方法一:
这种方法不需要修改任何配置文件,给不需要分组的字段上加上 any_value() 函数即可。any_value:选择被分到同一组数据中的第一条数据的指定列值作为返回数据。
方法二(临时):
打开 sql 运行:
SET sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'
3.方法三(永久):
/etc/mysql/my.cnf
输入:
[mysqld]
# 设置sql_mode,关闭ONLY_FULL_GROUP_BY,避免使用group by函数导致1055错误
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
重启 mysql sudo systemctl restart mysql