Posted at

MySQL 5.7.8以降で古いアプリが動かない場合の対処(sql_mode)

More than 3 years have passed since last update.

MySQL 5.7からはデフォルトの設定が色々変わっているので、5.6で動いていたアプリケーションが動かないケースがある。


主な理由はデフォルトのsql_modeの違い


  • 5.7からはデフォルトでONLY_FULL_GROUP_BYNO_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だけとかに設定する。