タディのブログ

人狼ゲームのことや、猫カフェの画像や身近に起きたことを適当に書いてます。旧薫平ブログです。

【Mysql】MysqlのTimeStamp型は生年月日には使ってはならない理由

~~2011/02/12追記~~ TIMESTAMP型からDATETIME型にALTERすることで下記は解消しました。 ~~2011/02/12追記終了~~

ひょっとしたらMysql利用者にとっては当たり前のことなのかもしれないですが、自分は今回初めて直面したので、健忘の為に書きます。

MysqlのTimeStamp型は特殊で、YYYYに指定できる範囲が1970~2039と制限されています。

参照:Mysql公式リファレンス http://dev.mysql.com/doc/refman/4.1/ja/datetime.html

~~一部抜粋~~ DATETIME、DATE、および TIMESTAMP 型の値はいずれも、同じ形式セットで指定することができるが、値の範囲については、すべての型で同じであるわけではない。たとえば、TIMESTAMP 型の値は、1970 より前にしたり、2037 より後にすることはできない。したがって、'1968-01-01' などの日付は、DATETIME 型や DATE 型の値としては正しいが、TIMESTAMP 型の値としては正しくないため、このようなオブジェクトに割り当てると、値は 0 に変換される。 ~~抜粋終了~~

よって、生年月日情報の保持をTimestamp型にすると1970年以前の方の情報は、正しく保持されず、2039年以降に生まれる方も同様に保持されないようです。

具体的にはEC-CUBEの案件で気づいたのですが、ECサイトや、年齢認証が必要なサイトの構築では致命的な設計ミスになります。

もし、ご存知でない方が入ればご注意を。