MySQLのDateタイプに日付フォーマットではない文字列を許容する

広告:超オススメUnity Asset
  広告:超オススメUnity Asset

古いMySQL(5.7よりも前)は許容されていたのかな、MySQLを新しくしたら

Invalid datetime format: 1292 Incorrect date value: ‘0000-00-00’ for column ‘date’ at row 1

のようなエラーが出るようになりました。本来なら、nullを入れるようにするとか正しく入れ方を変えるべきですが、コードの修正箇所が多いため、早急にでも対応した場合もあるかと思います。

その場合、MySQLの方でこの値を入れることを許容させることができるようです。

MySQL5.7以降では、NO_ZERO_DATEがデフォルトで有効になっているため、NO_ZERO_DATEを無効にすれば許容されるようになります。

phpMyAdminの「SQL」で実行するか(長い文字列の結果が見えないので後者がおすすめ)、ssh接続で mysql -u root -p を打ってMySQLにログインし、まず以下のSQLを実行すると、現在のグローバルSQLモードがどのようになっているかを表示できます。

SELECT @@global.sql_mode;

確かNO_ZERO_DATEにが含まれているので、ここからNO_ZERO_DATEを取り除くことで許容されるようになります。

SET GLOBAL sql_mode = REPLACE(@@sql_mode, 'NO_ZERO_DATE', '');

を実行すると、グローバルSQLモードからNO_ZERO_DATEを取り除けます。再度、上記の確認を行うと確かにNO_ZERO_DATEがなくなったことも確認できます。これ以降、「0000-00-00」のような無効な日付フォーマットを入れても許容され、エラーは出なくなります。

本来なら、無効な日付フォーマットは入れるべきではないので、デフォルトでNO_ZERO_DATEが有効なのでしょうから、あくまでも一時的な応急措置と思っておくのがいいと思います。

スポンサーリンク