前置き
先日、開発環境のデータベースに大量のレコードを取り込んだ際に下記のエラーが表示されました。
Invalid default value for 'date'
-- `日付`のデフォルト値が無効です
原因として、取り込んだレコードのdate
のカラムに0000-00-00
が存在したため、上記のエラーが表示される状態でした。
MySQLのサーバー設定(SQLモード)ではバージョンにもよりますが、日付型ではデフォルト値が0000-00-00
は許容されてない場合がございます。
なのでSQLモードを変更することで0000-00-00
の日付を許容することが出来ます。
SQLモードを変更する
# まずはSQLモードの設定を確認する
mysql> SELECT @@GLOBAL.sql_mode;
+-------------------------------------+
| @@GLOBAL.sql_mode |
+-------------------------------------+
| NO_ZERO_DATE,NO_ENGINE_SUBSTITUTION |
+-------------------------------------+
※NO_ZERO_DATEが日付に0が入っているレコードが許容しない設定
# NO_ZERO_DATEを無効にする
mysql> SET GLOBAL sql_mode = 'NO_ENGINE_SUBSTITUTION';
+------------------------+
| @@GLOBAL.sql_mode |
+------------------------+
| NO_ENGINE_SUBSTITUTION |
+------------------------+
まとめ
MySQLのSQLモードについては公式のページはこちらです。
日付に関してエラーが表示された場合は、SQLモードの設定を確認してみましょう。