在DATETIME和TIMESTAMP之间同步

时间:2013-04-15 16:56:25

标签: mysql sql

正如Should I use field 'datetime' or 'timestamp'?明确指出的那样,DATETIME和TIMESTAMP字段之间的主要区别是:

  1. MySQL中的TIMESTAMP通常用于跟踪记录的更改,并在每次更改记录时自动更新。
  2. DATETIME表示日期(在日历中找到)和时间(可以在挂钟上观察到),而TIMESTAMP表示明确定义的时间点。
  3. 只有TIMESTAMP值从当前时区转换为UTC进行存储,并从UTC转换回当前时区进行检索。
  4. 所以,我有一个包含date_created列和date_modified列的表。我将date_created设置为DATETIME,因此每次更新记录时都不会覆盖它,并将date_modified设置为TIMESTAMP,以便每次更新记录时都会更新。

    如何保持两者同步?例如,在最初创建记录,date_created和date_modified列之后,它们将是相同的。如果记录从未改变过,那么无论时区和夏令时如何,它们应该保持不变,不是吗?

1 个答案:

答案 0 :(得分:2)

列表中的第1点不完全正确。 DEFAULT CURRENT_TIMESTAMPON UPDATE CURRENT_TIMESTAMP是可以应用于TIMESTAMP字段的选项(现在也可以应用于5.6 DATETIME字段)。它们不是TIMESTAMP的固有属性。如果您使用的是5.6之前的版本,那么您应该对这两个字段使用TIMESTAMP

CREATE TABLE my_tbl
  (date_created TIMESTAMP DEFAULT CURRENT_TIMESTAMP, 
   date_modified TIMESTAMP ON UPDATE CURRENT_TIMESTAMP)

date_created将在创建记录时获取当前时间戳,并且每当记录更新时,date_modified将设置为当前时间戳(您可以在更新中使用date_modified = date_modified来阻止此操作)。 / p>

如果您使用的是MySQL 5.6,则可以使用DATETIME并获得相同的行为。

请参阅http://dev.mysql.com/doc/refman/5.6/en/timestamp-initialization.html