Php 2038年,UNIX_TIMESTAMP()是否会因未签名的Int列而失败?

Php 2038年,UNIX_TIMESTAMP()是否会因未签名的Int列而失败?,php,mysql,time,unix-timestamp,milliseconds,Php,Mysql,Time,Unix Timestamp,Milliseconds,只要有可能,我总是小心地使用无符号值。因此,我所有的时间戳字段都没有签名。在我可能去世或至少退休很久之后,其他人可以处理2108年的问题,而不是像你们所有人在几十年后都将面临的那样处理2038年的错误 至少我是这么想的。然而,我注意到,在任何情况下,如果我依赖MySQL的超级方便的UNIX_TIMESTAMP()函数,而不是让PHP使用time()解析查询,那么我所有的努力都可能是完全无用的。如果UNIX_TIMESTAMP()足够聪明(或愚蠢)可以包装,以便在这段时间后仍然有用,那就太好了,但

只要有可能,我总是小心地使用无符号值。因此,我所有的时间戳字段都没有签名。在我可能去世或至少退休很久之后,其他人可以处理2108年的问题,而不是像你们所有人在几十年后都将面临的那样处理2038年的错误

至少我是这么想的。然而,我注意到,在任何情况下,如果我依赖MySQL的超级方便的UNIX_TIMESTAMP()函数,而不是让PHP使用time()解析查询,那么我所有的努力都可能是完全无用的。如果UNIX_TIMESTAMP()足够聪明(或愚蠢)可以包装,以便在这段时间后仍然有用,那就太好了,但显然它只返回0。(一直以来,我都认为使用time()是愚蠢的,而让MySQL使用UNIX_TIMESTAMP()效率更高。)

在某些情况下,我一直在过渡到一个新的标准,我称之为“millitime”,它是自Unix纪元以64位数字存储以来的毫秒数。2.92亿年的毫秒精度似乎比2.92亿年的秒精度要好得多。由于大多数服务器每秒处理大量请求,因此具有这种精度非常重要,而我强调要考虑一个实际应用程序,用于管理未来3亿年的事件日期。(那时人类还会存在吗?)这方面似乎没有标准,所以我认为需要使用PHP从microtime()函数手动解析

  function millitime () {
    $a = microtime();
    return substr($a, 11).$a[2].$a[3].$a[4];
  }
所以我有几个问题:

  • 这是真的吗。即使将UNIX_TIMESTAMP()放入一个无符号的4字节字段,它也会失败吗
  • 您是否希望UNIX_TIMESTAMP()可以在2038年之前更新以包装或以其他方式修复此问题,还是MySQL会崩溃?随着这个日期的临近,你认为MySQL最有可能采用的方式是什么
  • 当我知道我不需要超过秒的精度,并且不需要在2108年后使用系统时,最简单和最有效的无符号替代方案是什么?MySQL是否有一个64位或无符号的等价物,并且仍然可以存储在一个4字节的字段中
  • 生成上述millitime()的最佳(最快)方法是什么,将其放入数据库或在PHP中使用?不反对咬东西

  • 这个问题有很多有用的资源,尽管大多数都与UNIX_TIMESTAMP()无关。对我所处理的大多数应用程序来说,环绕式(wrapp-around)是很好的,比0更有价值。我发现DATETIME很难处理(记不清细节),而且它还需要加倍的存储空间。我喜欢在每个表上保留多个时间戳,这样我就知道什么时候生成和更新内容,所以空间差异可能很大。那篇博文特别有用。我想知道是否有任何方法可以使它在查询中更具可读性,是否比使用PHP的time()更有效。