【MySQL】MySQL5.6ではsql_modeがSTRICT_TRANS_TABLESになる

  • 21
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

MySQL5.6へ移行した際に以下のエラーが発生。

エラー
SQLSTATE[HY000]: General error: 1364 Field 'hogehoge' doesn't have a default value

ググると、このエラーはデフォルト値がないカラムに、値なしでinsertしていることを怒っているらしく、mysql5.6からsql_modeのデフォルト値がSTRICT_TRANS_TABLESになったことが原因らしい。

STRICT_TRANS_TABLESを外す方法

sqlを直すのは手間なので、設定を変更することに。
/etc/my.cnfを変更してmysql再起動しても反映されず、いろいろ調べたら/usr/my.cnfの設定が使われていた。
複数設定ファイルがある場合は後勝ちになるらしい。ちなみに、環境はCentOS7。

参考:my.cnfのパラメータ優先順位

/usr/my.cnfを以下のように修正して再起動したら反映された。

my.cnfの修正箇所
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

sql_mode=''
mysql再起動
service mysqld restart

mysqlから設定の確認。

設定確認
mysql> SHOW VARIABLES LIKE 'sql_mode';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| sql_mode      |       |
+---------------+-------+

参考
MySQL 5.6 で General error: 1364 Field ‘{COLUMN_NAME}’ doesn’t have a default value エラーの対処
MySQL5.6にしていくつかのSQLでエラーが出るようになった