2038 年錯誤:綜合指南
2038 年錯誤是一種潛在的軟體故障,可能會在使用簽署32 位元的系統上出現整數來儲存系統時間,作為自1970 年1 月1 日以來的秒數。這是詳細資訊細分:
2038 年問題是什麼?
一旦時間超過 2038 年 1 月 19 日 03:14:07 UTC,代表 2038 年問題的 32 位元計數器自 UNIX 紀元將「環繞」以來的秒數,儲存解釋為 12月時間的負值1901.
原因和後果
發生這種情況是因為超過了 32 位元整數的最大值。依賴此時間表示的系統會將未來日期誤解為過去日期,可能導致錯誤和失敗。
解:
- 使用長資料型別 (64位元或更高位元)。
- 在 MySQL 或 MariaDB 中,考慮使用 DATE(僅適用於日期)或 DATETIME(適用於日期和日期) time) 而不是 TIMESTAMP。
- 請參閱 2038 年問題的維基百科頁面以取得其他解決方案。
- 將MySQL 更新到版本8.0.28 或
替代方案:
潛在的破壞性用途案例:
- MySQL DATETIME 的範圍(1000-9999) 比TIMESTAMP (1970-2038) 更窄,導致2038年之後的日期有潛在問題,例如出生日期和未來的未來日期。
改造現有應用程式:
- 對於使用 TIMESTAMP 的 PHP 應用程序,請考慮將列轉換為 DATETIME。請按照答案部分中提供的步驟執行此轉換。
資源:
- 2038 年問題(維基百科):https:// en.wikipedia.org/wiki/Year_2038_problem
- 網路將會終結30年後:https://www.theregister.com/2022/08/06/year_2038_bug_web/
以上是什麼是 2038 年問題以及我們如何避免它?的詳細內容。更多資訊請關注PHP中文網其他相關文章!