2017-08-02 17 views
1

nullを指定できるDateフィールドに挿入しようとする挿入文を実行するときにエラーが発生するPHPとMySqlのコードがあります。私はコードが別の環境で動作していると考えています。そのため、環境が異なる可能性があり、MySql Dateフィールドに空の文字列を入れてNULLとして解釈させることができるのだろうかと思っています。日付フィールドの空の文字列をNULLとして解釈するMySQLのグローバル設定?

文字列 "0000-00-00"を使用して自分の環境に挿入できますが、日付列にNULL値が作成されますが、無効です。

+0

「挿入前」トリガーを作成します。トリガーコードで、 'new.date_column_name'が空の文字列と等しいかどうかを検査します(' set new.date_column_name = null; ')。これはデータベースレベルでの迅速な修正です。 0の長さの文字列を 'null 'と解釈するグローバルレベルの設定はありません。もしあれば、それは災害になるだろう。 – Mjh

+0

応答のおかげで、私は既存のデータベース内のテーブルにトリガがあるとは思わない。私は、動作するように見えるデータベースの最新のコピーを持っていて、トリガーが含まれていると信じています。この文が別の環境で動作する可能性があります。 –

答えて

2

MySQLの開発者は、デフォルトのSQLモードを徐々に強化して、MySQLが提供するデータをより熟知させるようにしています。新しいバージョンは古いバージョンよりも制限の厳しいデフォルトを持っています。だから、これまで働いていたものはもう働きません。

空の文字列をDATE列に挿入する前に、このコマンドを発行してみてください。それはMySQLが不平を停止するようにするはずです。

set session sql_mode = 'ALLOW_INVALID_DATES'; 

詳細については、これをお読みください。 https://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sqlmode_allow_invalid_dates

+0

ありがとう、それは違いがあるようです。 –

関連する問題