鶏口牛後な日々

心の赴くまま、やりたいことを仕事に。

MySQLのtimestampとdatetimeの違いは?

timestampというのは、 作成日時とか、更新日時とか自動で入れる日時系によく使われますよね。

一方で、datetimeというものもあって、これの違いってなんだろう? と思ったので調べてみました。

結論としては、その取れるあたいの幅が違うようです。

公式ドキュメント によると、

The DATE type is used for values with a date part but no time part. MySQL retrieves and displays DATE values in 'YYYY-MM-DD' format. The supported range is '1000-01-01' to '9999-12-31'.

The DATETIME type is used for values that contain both date and time parts. MySQL retrieves and displays DATETIME values in 'YYYY-MM-DD HH:MM:SS' format. The supported range is '1000-01-01 00:00:00' to '9999-12-31 23:59:59'.

The TIMESTAMP data type is used for values that contain both date and time parts. TIMESTAMP has a range of '1970-01-01 00:00:01' UTC to '2038-01-19 03:14:07' UTC.

とのこと。

つまり、dateは日時だけで、datetimeは秒まで(正確にはより細かいマイクロ秒とかも)持つことができますが、日時の範囲は、 1000年の1月1日9999年の12月31日 まで取りうるようです。 一方で、timestampは、 1970年1月1日2038年1月19日 までとのこと。 結構現実的に運用している時期を想定しているということでしょうか。

より詳しいことは公式ドキュメントでどうぞ!