ホームページ > バックエンド開発 > PHPチュートリアル > 2038年問題: 技術的なタイムワープをどうやって防ぐことができるか?

2038年問題: 技術的なタイムワープをどうやって防ぐことができるか?

Susan Sarandon
リリース: 2024-12-15 10:51:09
オリジナル
739 人が閲覧しました

Year 2038 Problem: How Can We Prevent a Technological Time Warp?

2038 年問題: その正体とその解決方法

2038 年問題とは何ですか?

2038 年問題は、以下のソフトウェアとシステムに影響を与えます。日付を 32 ビットの符号付き整数として保存し、1970 年 1 月 1 日の 00:00:00 UTC からの秒数を表します。カウンターが 2038 年 1 月 19 日の 03:14:07 UTC に最大値 (2,147,483,647) を超えると、負の数に「ラップアラウンド」するため、不正確になります。

なぜ、いつ発生するのですか?

この問題は、広範囲の日付を表す 32 ビット整数の容量が限られているために発生します。カウンタが最大値に達すると、超過時間を 1901 年 12 月 13 日の日付として解釈します。

2038 年問題の解き方

Long データ型を使用する:
64 ビット整数を使用するようにソフトウェアをアップグレードしてください日付ストレージのデータ型により、大幅に拡張された時間範囲が提供されます。

MySQL 固有の解決策:

  • MySQL の場合、日付の格納に DATE カラム タイプの使用を検討してください。
  • 精度を高めるには、TIMESTAMP の代わりに DATETIME を使用します。 DATETIME はタイムゾーン情報を保存しないので、アプリケーションで管理する必要があることに注意してください。
  • Y2038 問題との互換性を提供する MySQL 8.0.28 以降にアップグレードしてください。

TIMESTAMP の代替

データベースでは、使用を検討してください日付を保存するための 64 ビット データ型 (例: GNU C のlong long) または PHP の BCmath 拡張機能。

既存のアプリケーションのリスクを軽減する

問題を回避するにはTIMESTAMP を使用する既存のアプリケーション:

  • Convert TIMESTAMP一時列を作成し、変換されたデータで更新し、一時列を削除することで DATETIME に変換します。

潜在的な破壊的なユースケース

2038 年より前であっても、 TIMESTAMP はその範囲のみをカバーするため、将来の日付 (誕生日、長期住宅ローンなど) を保存するシステムではエラーが発生する可能性があります。 1970 年から 2038 年。

詳細情報のリソース:

  • [2038 年問題](https://en.wikipedia.org/wiki/ Year_2038_problem)
  • [インターネットは 30 年後に終わる年](https://www.technologyreview.com/s/411029/the-internet-will-end-in-30-years/)

以上が2038年問題: 技術的なタイムワープをどうやって防ぐことができるか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート