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中文网其他相关文章!