首页 > 后端开发 > php教程 > 2038 年问题:我们如何防止技术时间扭曲?

2038 年问题:我们如何防止技术时间扭曲?

Susan Sarandon
发布: 2024-12-15 10:51:09
原创
737 人浏览过

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 年问题

使用长数据类型:
升级您的软件以使用 64 位整数数据类型来表示日期存储,提供显着扩展的时间范围。

MySQL 特定解决方案:

  • 对于 MySQL,考虑使用 DATE 列类型仅存储日期。
  • 为了获得更高的精度,请使用 DATETIME 而不是 TIMESTAMP。请注意,DATETIME 不存储时区信息,因此您的应用程序必须管理它。
  • 升级到 MySQL 8.0.28 或更高版本,这提供了与 Y2038 问题的兼容性。

TIMESTAMP 的替代品

在数据库中,考虑使用64 位数据类型(例如,GNU C 中的 long long)或 PHP 中的 BCmath 扩展用于存储日期。

减轻现有应用程序中的风险

避免以下问题使用 TIMESTAMP 的现有应用程序:

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板