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

错误原因

  1. 在MySQL5.7之后sql_mode中默认存在ONLY_FULL_GROUP_BY,SQL语句未通过ONLY_FULL_GROUP_BY语义检查所以报错。
  2. 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

换色
阅读
登录
扫码