【MySQL】Datetime型にNULLが登録されないときの回避法

DB

MySQLのDateTime型でハマりました。
MySQLのDatetime型のカラム(example)に以下のように空白で登録すると

mysql> insert into table_nm (id,example)values(1,””);

DBには「0000-00-00」と登録されている・・・。
NULLになるはずではないのか??

ちなみに、ちゃんとexampleカラムはNULL許可にしてあります。
同じくDatetime型のカラム(example)に以下のようにNULLを登録する

mysql> insert into table_nm (id,example)values(2,”NULL”);

DBには「NULL」と登録されています。

Datetime型にNULLで入力したいときは、空白でなくちゃんとNULL指定してあげることが
必要ということは分かったが、なぜ勝手に0000-00-00と登録されるのか?

MySQLでは、「ダミーの日付」として ‘0000-00-00’ の「ゼロ」の値を格納することができます。
場合によっては、NULL 値を使用するよりも便利である場合もあります。

この’0000-00-00′ を無効にするには、NO_ZERO_DATE SQL モードを有効にする必要があります。

【解決法】

・無効な日時を禁止するよう設定
my.cnf の [mysqld] セクションに次のように追記する。

sql_mode = STRICT_ALL_TABLES,NO_ZERO_DATE,NO_ZERO_IN_DATE

これで、変な日付を入力しようとするとエラーになります。

タイトルとURLをコピーしました