从PHP存储MySQL日期的最佳实践

tre*_*nik 25 mysql datetime unix-timestamp

我一直在使用unix时间戳.

我喜欢它,因为它很容易比较,它很快,因为我将它存储为整数.因为我使用的是PHP,所以我可以从unixtimestamp中获取date()函数的任何日期/时间格式.

现在,有些人说最好使用DATETIME格式.但除了更合适的名字,我没有看到任何优势.

使用DATETIME确实更好,如果是这样,有什么优势?

谢谢.

Gav*_*Gav 31

如果您将日期存储为数据库中的Unix时间戳,那么您将给自己带来繁重的负担.您必须将它们转换为您要使用的格式,您必须在日期范围之间进行计算,您必须构建查询以获取范围内的数据.这似乎是违反直觉的 - 当然,你的"程序员时间"最好用于解决实际问题?

以MySQL提供的正确格式存储日期和时间似乎更好的做法,然后使用数据库函数为您想要的数据创建查询.与下午阅读(和理解)下午相比,你浪费所有转换和捣乱的时间是巨大的11.6 MySQL日期和时间函数

  • MySQL的DATETIME字段没有时区 - 总是以UTC格式存储日期(即避免NOW() - 使用UTC_TIMESTAMP())否则当你尝试国际化你的应用程序时,你将陷入一团糟,无论什么*原因改变你的服务器时区. (2认同)

cod*_*ama 8

我一直都是unix时间戳的忠实粉丝.但我认为正确答案是:"取决于".我最近做了一个表数据库,我只想列出URL.会有一个日期字段,但日期字段纯粹用于排序.即按last_crawled排序.这意味着我永远不会在该字段上使用任何内置日期函数.它只是一种简单的方法来获取最早的条目,我永远不会将日期函数应用于此字段.现在,如果我把它作为日期字段,我会失去两件事:

  1. 日期时间字段是整数的两倍
  2. 按整数排序更快(不是100%肯定这个,这个问题的未决结果)

但是,对于另一个系统,我必须存储交易信息.这使得使用内部mysql日期函数成为可能,当我们不得不开始做报告时,它们变得非常有用.


cle*_*tus 7

使用MySQL日期/时间类型的一个优点是能够更简单地使用MySQL中日期/时间函数.

DATE类型还具有以下优点:它只存储日,月和年,因此没有浪费的空间或比较复杂性,因为在您只关心白天而不是时间的情况下,自纪元时间起几秒钟.

就个人而言,我倾向于使用数据库作为数据转储,因此这些功能没什么意义.在PHP中,我倾向于只以整数格式存储日期,这几乎是你陈述的原因.


hes*_*amy 6

@Smita V,您引用的低效查询只是因为您将转换函数错误地应用于每个表行,您应该将它应用于条件本身.而不是

select col1,col2,colUnixdatetime from table where From_Unixtime(colUnixdatetime) between wtvdate1 and wtvdate2
Run Code Online (Sandbox Code Playgroud)

,它会转换表格中的每一行,将其与您所拥有的日期进行比较.你应该用

select col1,col2,colUnixdatetime from table where colUnixdatetime between UNIX_TIMESTAMP(wtvdate1) and UNIX_TIMESTAMP(wtvdate2). 
Run Code Online (Sandbox Code Playgroud)

这样做将使用适当的表索引.

@treznik不久之前,由于上面提到的原因,我从uts整数移动到日期时间或时间戳数据类型,因为它们更容易阅读和操作(我做了很多直接表访问).但是我最近开始重新考虑这种方法有两个原因:

  1. 没有存储时区位置,因此您根据您的位置推断时区.这对您来说可能是也可能不是问题.
  2. 它忽略了夏令时.因此,当时钟在凌晨2点返回时,您将在凌晨1:30凌晨两次,并且说2011-10-30 01:30不会让您知道这一点,而1319938200则不然.我认为在mysql中存在一种本地方式来存储日期,包括时区,除了字符串(2011-10-30 01:30 BST).

我自己也在试图找出答案.