article-thumbnail

macのMySQLでGROUP BYを使用できるように設定変更する

カテゴリ: mac

タグ: MySQL,GROUP BY,my.cnf

2020-10-11 02:22:24

【概要】

macにインストールされているMySQL8系にてGROUP BY句を使用した時に下記のエラーが出力され、実行できない事があります。

Expression #5 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'カラム名' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

このドキュメントではその対処方法についてまとめています。

ちなみに筆者のMySQLのバージョンは下記になります。

mac OS Catalina
MySQL 8.0.19


【詳細】

1. my.cnfのコピーを作成する

MySQLの設定を変更する為に、my.cnfを編集します。

設定変更に伴い、不具合が起きたい際の対処としてコピーを作成します。

cp /usr/local/etc/my.cnf /usr/local/etc/my.cnf.org


2. my.cnfを編集する

GROUP BYが使用できる設定を追記します。

vi /usr/local/etc/my.cnf

追記内容

[mysqld]
...デフォルト設定部分省略...
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION


3. MySQLを再起動する

設定を反映させる為に再起動します。

mysql.server restart


【参考:クエリで設定変更する場合対応】

下記のクエリを流すとGROUP BYが使用できるようになります。

しかし、MySQLを再起動すると再度下記のクエリを流さないとGROUP BY句が使用できないので注意です。

SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));