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
これで、変な日付を入力しようとするとエラーになります。