我一生都在使用unix时间戳。
我喜欢它,因为它很容易比较,它很快,因为我将它存储为整数。由于我使用的是 PHP,因此我可以使用 unixtimestamp 中的 date() 函数获取任何日期/时间格式。
现在,有人说最好使用 DATETIME 格式。但除了更合适的名字,我没有看到任何优势。
使用 DATETIME 确实更好,如果可以,有什么好处?
谢谢。
我一生都在使用unix时间戳。
我喜欢它,因为它很容易比较,它很快,因为我将它存储为整数。由于我使用的是 PHP,因此我可以使用 unixtimestamp 中的 date() 函数获取任何日期/时间格式。
现在,有人说最好使用 DATETIME 格式。但除了更合适的名字,我没有看到任何优势。
使用 DATETIME 确实更好,如果可以,有什么好处?
谢谢。
如果您将日期作为 Unix 时间戳存储在数据库中,那么您将承担繁重的工作。您必须将它们转换为您想要使用的格式,您必须在日期范围之间进行计算,您必须构建查询以获取某个范围内的数据。这似乎违反直觉——你的“程序员时间”肯定最好花在解决实际问题上吗?
以 MySQL 可用的正确格式存储日期和时间,然后使用数据库函数为您想要的数据创建查询,这似乎是更好的做法。与花在阅读(和理解) 11.6 MySQL 日期和时间函数的下午所花费的时间相比,您将浪费在进行所有转换和捣乱上的时间是巨大的
我也一直是 unix 时间戳的忠实粉丝。但我认为正确的答案是:“取决于”。我最近做了一个单表数据库,我只想列出 URL。会有一个日期字段,但日期字段纯粹是为了排序。即按last_crawled 排序。这意味着我永远不会在该字段上使用任何内置日期函数。这只是首先获取最旧条目的一种简单方法,我永远不会将日期函数应用于该字段。现在,如果我将其设为日期字段,我将失去两件事:
但是,对于另一个系统,我必须存储交易信息。这使得使用内部 mysql 日期函数成为可能,这在我们必须开始做报告时非常有用。
使用MySQL 日期/时间类型的一个优点是能够更简单地使用MySQL 中的日期/时间函数。
该DATE
类型还具有仅存储日、月和年的优点,因此不会浪费空间或比较复杂的情况,因为您只关心日期而不是时间。
就我个人而言,我倾向于将数据库用作数据的转储,因此对此类功能没什么兴趣。在 PHP 中,出于您陈述的原因,我倾向于仅以整数格式存储日期。
@Smita V,您引用的低效查询只是因为您将转换函数错误地应用于每个表行,您应该将其应用于条件本身。所以而不是
select col1,col2,colUnixdatetime from table where From_Unixtime(colUnixdatetime) between wtvdate1 and wtvdate2
,它将表格上的每一行转换为与您获得的日期进行比较。你应该使用
select col1,col2,colUnixdatetime from table where colUnixdatetime between UNIX_TIMESTAMP(wtvdate1) and UNIX_TIMESTAMP(wtvdate2).
这样做将使用适当的表索引。
@treznik 不久前,出于上述原因,我从 uts 整数转换为 datetime 或 timestamp 数据类型,因为它们更容易阅读和操作(我做了很多直接表访问)。然而,我最近开始重新考虑这种方法,原因有两个:
我自己还在努力寻找答案。
使用数据库日期时间更有效,因为每次需要查询时,都需要应用 from_unixtime() 函数从表的 unix datetime col 中提取数据。在 where 子句中使用此函数将完全忽略任何索引使用。
说我的查询是:
从 wtvdate1 和 wtvdate2 之间的 colUnixdatetime 表中选择 col1,col2,colUnixdatetime
我需要运行:
从 wtvdate1 和 wtvdate2 之间的 From_Unixtime(colUnixdatetime) 表中选择 col1,col2,colUnixdatetime
上面的查询将完全忽略任何索引,这里没有使用索引,因为它们永远不会被使用,因为我总是必须使用一个函数来获取真实的日期时间。
where 子句中条件 LHS 上使用的任何内置函数都不会使用任何索引,如果您有一个 HUGE 表,您的查询将花费更长的时间。
更容易维护是一个优点。查看实际日期:
select * from table where ...
很不错。
比较容易比较,mysql提供了很多日期功能。