📌  相关文章
📜  mac mysql 这与 sql_mode=only_full_group_by 不兼容 - SQL (1)

📅  最后修改于: 2023-12-03 15:17:28.210000             🧑  作者: Mango

Mac下MySQL与sql_mode=only_full_group_by不兼容

问题描述

在Mac下使用MySQL时,可能会遇到与sql_mode=only_full_group_by不兼容的问题。具体表现为在执行包含GROUP BY的SQL语句时,会出现类似以下错误信息:

ERROR 1055 (42000): Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'example_db.example_table.id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
问题原因

该问题源于MySQL的默认配置,在MySQL5.7及以上版本中,sql_mode默认为ONLY_FULL_GROUP_BY,而Mac上安装的MySQL版本可能较老,不支持该特性,因此会出现上述错误。

解决方案
1.升级MySQL版本

将Mac上的MySQL升级到5.7及以上版本,可以避免该问题的出现,也能够使用only_full_group_by等新特性。

2.修改MySQL的sql_mode配置

可以修改MySQL的sql_mode配置,去掉ONLY_FULL_GROUP_BY特性,这样也可以避免上述错误。修改方法如下:

  1. 打开MySQL的配置文件my.cnf,该文件通常位于/etc/mysql目录下。

  2. 在文件末尾加上以下内容:

    [mysqld]
    sql_mode = "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
    

    注意:这是一个示例配置,实际配置需根据具体情况进行修改。

  3. 保存文件并重启MySQL服务。

    sudo service mysql restart
    
3.修改SQL语句

如果以上两种方法无效,也可以考虑修改SQL语句,避免使用GROUP BY,或者通过聚合函数将查询结果分组,例如采用MAXMIN等函数。

总结

在Mac下使用MySQL时可能会遇到与only_full_group_by不兼容的问题,可以通过升级MySQL版本、修改sql_mode配置或者修改SQL语句来解决该问题。