gpt4 book ai didi

php - MySQL 日期或 PHP 时间?

转载 作者:IT老高 更新时间:2023-10-28 23:51:59 25 4
gpt4 key购买 nike

我通常在 MySQL 数据库中使用 PHP 的 time() 函数将日期存储为整数,而不是使用 MySQL 的日期格式,因为当我把它拉出来时它更容易操作,但是有什么缺点吗到这个?

最佳答案

范围:

总有一个明显的缺点:您可以存储的范围仅限于 1970 年到 2038 年。如果您需要存储此范围之外的日期,通常需要使用其他格式。我发现最常见的适用情况是生日。

可读性:

我认为人们选择使用其中一种内置日期类型的最重要原因是数据更易于解释。您可以进行简单的选择并理解值,而无需进一步格式化响应。

索引:

使用日期类型的一个很好的技术原因是它允许在某些情况下进行索引查询,而 unix 时间戳则不允许。考虑以下查询:

SELECT * FROM tbl WHERE year(mydate_field) = 2009;

如果 mydate_field 是 native 日期类型,并且字段上有索引,则此查询实际上将使用索引,尽管函数调用。这几乎是 mysql 唯一一次可以像这样优化字段上的函数调用。时间戳字段上的相应查询将无法使用索引:

SELECT * FROM tbl WHERE year(from_unixtime(mytimestamp_field)) = 2009;

如果您稍微考虑一下,就会发现有一种解决方法。此查询执行相同的操作,并且能够使用索引优化:

SELECT * FROM tbl WHERE mytimestamp_field > unix_timestamp("2009-01-01") AND mytimestamp_field < unix_timestamp("2010-01-01");

计算:

通常,我将日期存储为 unix 时间,尽管有缺点。这并不是真正基于它的优点,而是因为我已经习惯了。我发现这简化了一些计算,但使其他计算复杂化。例如,很难将一个月添加到 unix 时间戳,因为每个月的秒数各不相同。使用 mysql DATE_ADD() 函数非常容易。但是,我认为在大多数情况下它实际上简化了计算。例如,您通常希望选择最近两天的帖子。如果该字段包含 unix 时间戳,这可以通过简单地执行以下操作轻松完成:

SELECT * FROM tbl WHERE mytimestamp_field > time() - 2*24*3600;

这可能是个人喜好问题,但我个人认为这比必须记住 DATE_SUB() 等函数的语法更快、更容易。

时区:

Unix 时间戳无法存储时区数据。我住在瑞典,那里只有一个时区,所以这对我来说不是问题。但是,如果您生活在一个跨越多个时区的国家/地区,这可能会是一个很大的痛苦。

关于php - MySQL 日期或 PHP 时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/977967/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com