MySQL5.1環境下で作成したシステムをMySQl5.7の環境で実行したら以下のエラーが発生した。
SELECT list is not in GROUP BY clause and contains nonaggregated column ・・・ with sql_mode=only_full_group_by
MySQl5.7からはデフォルトでsql_modeにONLY_FULL_GROUP_BYが設定されるため、SELECTしてよい項目はgroup byの対象項目だけだよということ。
至極当たり前なんだけど、既に動作しているシステムでもあり、修正は考えたくない。
よってONLY_FULL_GROUP_BYをsql_modeから外すことを考える。
最初に現在のsql_modeを確認
mysql> show variables like 'sql_mode'; +---------------+-------------------------------------------------------------------------------------------------------------------------------------------+ | Variable_name | Value | +---------------+-------------------------------------------------------------------------------------------------------------------------------------------+ | sql_mode | ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION | +---------------+-------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec) mysql>
※my.cnfにはsql_modeについての記載はない。
よって以下を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
mySQLを再起動して終了