Help us understand the problem. What is going on with this article?

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だけとかに設定する。

tao_s
オープンソースなweb屋です。 Webベースの業務システムからECサイト、ブログまで何でもござれ EC-CUBE、concrete5のコミッターもやってます コンクリートファイブ ジャパン株式会社 ファウンダー
http://www.xross-cube.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away