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/