【发布时间】:2011-01-29 05:30:35
【问题描述】:
我在选择一种在 mysql 数据库中插入时间的有效方法时遇到了一些麻烦。
我知道 mysql 有自己的时间戳系统,但这不是我想要的。
我目前使用date("Y-m-d H:i:s", time());,它可以完成工作。
但我想知道标准是什么,或者插入时间以使其以后更容易检索的最佳做法是什么。
谢谢。
ps。我已经在网站上搜索了任何欺骗帖子,但我找不到任何内容,如果您认为这是欺骗,请随时关闭。
【问题讨论】:
我在选择一种在 mysql 数据库中插入时间的有效方法时遇到了一些麻烦。
我知道 mysql 有自己的时间戳系统,但这不是我想要的。
我目前使用date("Y-m-d H:i:s", time());,它可以完成工作。
但我想知道标准是什么,或者插入时间以使其以后更容易检索的最佳做法是什么。
谢谢。
ps。我已经在网站上搜索了任何欺骗帖子,但我找不到任何内容,如果您认为这是欺骗,请随时关闭。
【问题讨论】:
您以 mysql 喜欢的存储方式插入它,并在检索时按照您喜欢的方式格式化它 (DATE_FORMAT())。您不要以其他格式存储它,因为那是您想要显示它的方式,因为那样会破坏日期\时间的所有功能。
【讨论】:
最好的办法是在数据库中以 UTC 存储日期和时间,并在显示时将它们转换为适当的时区。 MySQL 甚至有一个特殊的函数来表示“now in UTC”:UTC_TIMESTAMP()。
当您使用 PHP 的 date 函数格式化 Unix 时间戳时,您将输出日期和时间的表示形式在 Web 服务器的时区。这很少是您想要的,并且每当网络服务器的时区发生变化时都会导致各种问题,例如在夏令时期间或如果网络服务器物理上重新定位到不同的时区。
【讨论】:
您可以将它们存储为 MySQL 时间戳,然后使用 UNIX_TIMESTAMP() 转换为 unix 时间以便在 PHP 中使用,也可以在插入时使用 FROM_UNIXTIME 将 unix 时间转换为 MySQL 时间戳。
SELECT UNIX_TIMESTAMP(`field`) AS `unix_timestamp` FROM `table`;
INSERT INTO `table` SET `field` = FROM_UNIXTIME(unix_timestamp);
【讨论】: