6月 12
MySQLのテーブル作成のテスト中、”desc tbl_name\G”で見てみると、TIMESTAMP型のカラムが”Null: YES”になっているのを発見。そういえば、テーブルの作成時に”NOT NULL”を付けてなかったのを思い出し、”NOT NULL”を付けて改めて作り直すも、結果は同じ。
*************************** 4. row *************************** Field: date_updated Type: timestamp Null: YES Key: Default: CURRENT_TIMESTAMP Extra:
何故?訳わかんないので調べてみると、MySQLのリファレンスマニュアルにしっかりと記述がありました。
TIMESTAMP 型カラムでは、他のカラム型とは異なる方法で NULL 値が処理される。TIMESTAMP 型カラムには、NULL は格納できない。カラムに NULL を挿入すると、カラムの値として現在の日時が設定される。TIMESTAMP 型のカラムはこのように動作するため、NULL 属性と NOT NULL 属性は通常どおりには適用されず、それらを指定しても無視される。 その一方で、TIMESTAMP 型のカラムを MySQL クライアントにとって使用しやすくするために、サーバは、(実際には、TIMESTAMP 型カラムには NULL 値は格納されないにもかかわらず)TIMESTAMP 型カラムについて、NULL 値の割り当てが可能(true)と報告する。DESCRIBE tbl_name を使用してテーブルに関する記述を取得すると、これを確認できる。 注意: TIMESTAMP 型のカラムに、値として 0 を設定するのは、NULL を設定するのとは異なる。0 は TIMESTAMP 型の有効な値である。
» MySQL 4.1 リファレンスマニュアル :: 6.5.3 CREATE TABLE 構文
こういう仕様な訳ですか。
Recent Comments