株式会社プロネット

 

WEBシステム開発、ITコンサルティング、自社サービス、教育事業 - これからのビジネスへのIT活用ソリューションをご提案致します。

MySQL5.7にアップデートしたらonly_full_group_byでエラーになった

2018.5.21(Mon) 18:32 | MySQL | sofuku

久しぶりの更新になってしまいました。

過去に作成したシステムのMySQLバージョンを5.7にアップデートした際に、以下のエラーで怒られました。

※ちょっと長いので改行しています。

Syntax error or access violation: 1055 Expression #124 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:5.7.20

 

MySQl5.7からデフォルトのままだとsql_modeでONLY_FULL_GROUP_BYが設定されるようになったため、一意にできていない場合にこのエラーになるそうです。

 

きちんと対応する方法としてはSQLをきちんと一意に特定できるように、GroupBy句に取得するカラムを指定したり、MAXやMIN、SUMなどで一意になるように修正する必要があります。

/* nameでGroupByしただけだとidが一意にできずエラー */
SELECT id, name FROM sample GROUP BY name;

/* GROUP BYの指定に取得取得カラムをすべて指定すると問題ない   */
SELECT id, name FROM sample GROUP BY id, name;

/* nameでGroupByした際にIDが重複しないようにMAXを使用   */
SELECT MAX(id), name FROM sample GROUP BY name;

 

ただ、SQLを全て修正するのが難しいケースもあります。

その場合はmy.cnfでsql_modeを変更します。

my.cnfの場所は、 mysql --help | grep my.cnf で表示されるので、以下の記述を追加します。

[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

sql_modeで、ONLY_FULL_GROUP_BYを未指定にします。
必要に応じてsql_modeの内容は変更してください。

MySQLを再起動してあげればエラーが表示されなくなります。