Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为什么不使用MySQL';什么时间戳?_Php_Mysql_Timezone - Fatal编程技术网

Php 为什么不使用MySQL';什么时间戳?

Php 为什么不使用MySQL';什么时间戳?,php,mysql,timezone,Php,Mysql,Timezone,如果您需要web应用程序在每个用户的基础上在时区之间进行转换,为什么不在所有日期/时间字段中使用时间戳呢?考虑时间戳值存储在UTC中,并在检索时转换为连接的时区设置。 我在IRC上问了这个问题,阅读了MySQL文档,广泛搜索了谷歌,并询问了我的同事,我还没有找到一个不使用时间戳的令人信服的理由 注:我知道时间戳的范围是1970-2038;在我的情况下,这不会是一个问题。另外,我将PHP与MySQL结合使用。我想你的答案如下: 我知道时间戳的范围是1970-2038;在我的情况下,这不会是一个问题

如果您需要web应用程序在每个用户的基础上在时区之间进行转换,为什么不在所有日期/时间字段中使用时间戳呢?考虑时间戳值存储在UTC中,并在检索时转换为连接的时区设置。 我在IRC上问了这个问题,阅读了MySQL文档,广泛搜索了谷歌,并询问了我的同事,我还没有找到一个不使用时间戳的令人信服的理由


注:我知道时间戳的范围是1970-2038;在我的情况下,这不会是一个问题。另外,我将PHP与MySQL结合使用。

我想你的答案如下:

我知道时间戳的范围是1970-2038;在我的情况下,这不会是一个问题


我会小心地假设项目的寿命,尤其是在数据库模式方面。数据库往往在使用它们的应用程序消失后很长一段时间内仍保留在原来的位置和使用中。

日期时间用于数据中使用的任意日期和时间

时间戳用于您希望自动更新时间的时间。如果您想知道行是何时插入/更新的,请使用时间戳

另外,请记住,时间戳只存储在UTC中——在作为查询的一部分传回之前,它将转换为服务器的本地时区


在你的情况下,你最好使用约会时间。如果您担心UTC,那没关系——只需使用UTC创建日期,而不是使用当地时间。使用

兰德尔霍的答案在许多事实上都是错误的

时间戳不需要在创建或更新时自动更新

此外,时间戳被转换为客户端的本地时间,而不是服务器的本地时间


只需查看MySQL文档中的datetime

MySQL肯定会发布2038版本的补丁——特别是考虑到绝大多数计算机届时将是64位的?也许会,但是作为一个成功的开发者,一部分是做最坏的打算,而不是抱着最好的希望。如果在25年内弄清楚如何修改一个表,使它成为你值得花时间去做的事情的清单,那么先生,你的状态比我们大多数人好得多。谢谢你的回复,但我不明白为什么我最好使用DATETIME,考虑到我必须在整个代码库中手动进行100个位置的转换,无论我在哪里使用PHP日期函数,数据库管理器都可以为我完成这项工作。无论如何,你必须进行日期转换。时间戳将返回转换为本地服务器时间的值。这不是用户的时区。您应该将日期存储在UTC中,并在UI级别将其转换为用户的时区。如果每当在用户会话中建立数据库连接时,我都运行“SET time_zone='the users timezone'”,该怎么办?在你看来,这是一个好的解决方案吗?是的,那会奏效。但我仍然建议您在UI层中处理它。这是一个逻辑/分层的事情。您不希望在数据层级别做出本质上是UI/显示的决策。我更喜欢在业务层级别掌握实际数据。如果在数据级别指定时区,则无法在业务层级别获得该信息。在你的情况下,它很可能不会对事情产生太大的影响,但你永远不知道什么时候这个决定会给你带来痛苦。最好将完整的UTC日期传递到UI层,并将该日期的任何显示转换为用户的时区。这实际上是一个注释,而不是答案。再重复一点。