php - 2038 年问题 - 64 位(Linux 操作系统、php、mysql)

标签 php mysql linux

select unix_timestamp('2038-01-19') 返回 2147472000

select unix_timestamp('2038-01-20') 返回 0

我检查了年 2038 问题。

我的 linux 操作系统是 64 位的,安装的 mysql 版本也是 64 位的。现在有什么办法解决这个问题?

mysql --version 返回 mysql Ver 14.14 Distrib 5.5.47,适用于使用 readline 5.1 的 Linux (x86_64)
Php 也是 64 位的。

也尝试过 BigInt,但没有用(返回同样的东西)。

最佳答案

简单地说,对于 MySQL,将日期存储为 DATETIME 而不是 TIMESTAMP

TIMESTAMP 是 4 个字节,因此没有物理空间可以存储比 1970-1-1 到 2038-01-19 以来更多的秒数...

DATETIME 的范围是 1000-1-1 到 9999-12-31...

另请参阅此完整 问题/答案:PHP & mySQL: Year 2038 Bug: What is it? How to solve it?

更新: 我看到的一种可能的替代方法是,如果您不能更改字段类型,则以不同方式解释您的时间戳...
我的意思是:如果您的应用程序将跟踪的 first 事件是 - 比方说 - 2000-1-1,您可以在后端(或在存储过程中)实现过滤器 数据库中),在读取时将 (2000-1-1 - 1970-1-1) 秒添加到您的时间戳,并减去阅读时的数量相同......这应该让你多活 30 年......

关于php - 2038 年问题 - 64 位(Linux 操作系统、php、mysql),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36793545/

相关文章:

.NET/Mono 框架定位

c - 是否可以在不继承父进程的虚拟内存空间的情况下 fork 进程?

php - 使用 Id 显示图像路径存储在数据库中的图像,

mysql - 创建具有两个双向唯一字段的表

php - 奇怪的 MYSQL 错误

mysql - SELECT INTO OUTFILE WITH "WHERE"语句

linux - Shell - 在不包含子目录的目录中创建 zip 文件

php - 我将如何评论我从另一位作者修改的 PHP 类?

php - Visual Studio 代码用户片段不适用于 PHP

php - 如何在不知道索引值名称的情况下打印数组的值