select unix_timestamp('2038-01-19')
回报2147472000
while select unix_timestamp('2038-01-20')
回报0
我查了一下年份2038
问题。
我的linux操作系统是64位,安装的mysql版本也是64位。现在这个问题有什么解决办法吗?
mysql --version
回报mysql Ver 14.14 Distrib 5.5.47, for Linux (x86_64) using readline 5.1
PHP也是64位的。
也尝试过 BigInt,但没有成功(返回相同的结果)。
简单地说,对于MySQL
,将日期存储为DATETIME
而不是TIMESTAMP
.
TIMESTAMP 是 4 个字节,因此没有物理空间可以存储比 1970-1-1 到 2038-01-19 以来更多的秒数......
相反,DATETIME 的范围为 1000-1-1 到 9999-12-31...
另请参阅此complete问题/答案:PHP 和 mySQL:2038 年错误:这是什么?怎么解决呢? https://stackoverflow.com/questions/2012589/php-mysql-year-2038-bug-what-is-it-how-to-solve-it
UPDATE:
如果您无法更改字段类型,我看到的一种可能的选择是interpet你的时间戳不同...
我的意思是:如果first您的应用程序将跟踪的事件是 - 例如 -2000-1-1
,您可以在后端(或在存储过程中实现过滤器inside数据库),添加(2000-1-1
- 1970-1-1
) 秒到你阅读时的时间戳,并在阅读时减去相同的量...这应该会让你再“生存”30年...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)