MySQL

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

More than 3 years have passed since last update.

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でエラーが出るようになった