MySQL 5.7からはデフォルトの設定が色々変わっているので、5.6で動いていたアプリケーションが動かないケースがある。
主な理由はデフォルトのsql_modeの違い
- 5.7からはデフォルトで
ONLY_FULL_GROUP_BY
やNO_ZERO_IN_DATE
とかが設定されている。 -
ONLY_FULL_GROUP_BY
が設定されていると、postgreSQLみたいにorder by句とgroup by句で同じカラムが指定されていないとエラーになる。 -
NO_ZERO_IN_DATE
が設定されていると、careate_date = '0000-00-00 00:00:00'
みたいなのでエラーになる。 - 5.7系でもバージョンによって細かくデフォルトのsql_modeが違うので注意が必要。
詳しくは公式のドキュメントを参照
<= 5.7.4
NO_ENGINE_SUBSTITUTION
>= 5.7.8
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
解決策
my.cnfとかでsql_modeをNO_ENGINE_SUBSTITUTION
だけとかに設定する。