スポンサーリンク

MySQLのtimestamp型の最大値は2038年までしかないという問題


MySQLのtimestampの最大値に気付いたきっかけ

データベースのテーブルのtimestamp型に、大きい値の年数を入れてみたらバグが出ないかチェックしてみたら、

そもそも大きい値が入らなかったのが、最大値に気付いたきっかけです。

最大値がいくつまでかと、その原因

最大値

最大値を調べてみると、2038年問題というのがWikipediaに上がっており、

日本時間で最大値は2038年1月19日3時14分7秒となっているそうです。

原因

原因を調査したところ、プログラムでの日付計算機能の仕組みが2038年までしか計算できない仕組みとなっていました。

プログラム開発をしている技術者はよく耳にしたことがあると思いますが、

日付計算をする仕組みは、1970年から足したり引いたりして計算しています。

最大値の原因その足し引きにあり、

足し引きできる最大の値が、32bitのint型であるため、

約68年分しか計算できないのです。

そのため、1970年+68年=2038年と、最大2038年までしか計算できない状態となっています。

上記の計算方法を使ってMySQLのtimestampの値が導き出されているのでその影響がMySQLに出ています。

考えられる解決策

2038年問題

2038年問題全体としては、足し引きの計算に使われる32bitであるint型を64bitに変えることが解決策として挙げられています。

64bitにすれば、約3000億年までは問題ないので、安心できます。

MySQLのtimestampの最大値は解決されるか

この問題は、MySQLを作ってる会社が、アップデート等の対応を待つしかなさそうです。

他の方法として、timestampでなくdatetimeを使って日付管理をするか、

他のDB(postgre等)を使うようにするといいです。

 

IT
スポンサーリンク
シェアする
trelab