在mySQL中存储时间戳

时间:2011-06-29 11:34:12

标签: php mysql timestamp

我记得我在某处读过mySQL时间戳数据类型用于在行更新时自动更新,这是真的吗?

我是否必须使用timestamp数据类型或bigint存储时间戳?

注意:mySQL不会生成必须存储的时间戳,它是使用PHP生成的预定义值。

感谢。

6 个答案:

答案 0 :(得分:16)

可以将TIMESTAMP类型的列设置为使用列定义中的ON UPDATE CURRENT_TIMESTAMP自动更新。

但是,这不会在插入记录时填充。如您所述,您可以使用PHP构建时间戳(格式:YYYY-MM-DD HH:MM:SS)并插入它,或者您可以在列定义中设置DEFAULT CURRENT_TIMESTAMP的另一个列属性。

有关详细信息:MySQL: TIMESTAMP Properties

<强>更新 如果unix timetstamp值是必需的输出,请使用TIMESTAMP存储该值,然后使用以下命令获取unix值:

SELECT UNIX_TIMESTAMP(your_column_name) FROM your_table_name

要使用unix时间戳插入,您可以使用FROM_UNIXTIME()

INSERT INTO (your_table_name) (your_column_name) VALUES (FROM_UNIXTIME(your_bigint_value));

答案 1 :(得分:5)

好吧我认为这已经解决了。

http://dev.mysql.com/doc/refman/5.0/en/date-and-time-types.html

零值时间戳看起来像这个'0000-00-00 00:00:00',因此它不能用于存储这样的unix时间戳:1309347278,所以它必须是BIGINT。

感谢。

答案 2 :(得分:2)

CREATE TABLE `db1`.`sms_queue` (
  `Id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  `Message` VARCHAR(160) NOT NULL DEFAULT 'Unknown Message Error',
  `CurrentState` VARCHAR(10) NOT NULL DEFAULT 'None',
  `Phone` VARCHAR(14) DEFAULT NULL,  
  `LastUpdated` TIMESTAMP NOT NULL ON UPDATE CURRENT_TIMESTAMP,
  `TriesLeft` tinyint NOT NULL DEFAULT 3,
  PRIMARY KEY (`Id`)
)
ENGINE = InnoDB;

答案 3 :(得分:2)

正确答案为int(11),因为时间戳是大/大整数

答案 4 :(得分:1)

  

我记得我在某处读过mySQL时间戳数据类型用于在行更新时自动更新,这是真的吗?

  

我是否必须使用timestamp数据类型或bigint存储时间戳?

时间戳是一种数据类型。创建表时,可以像latest_update TIMESTAMP(8)一样使用它。

答案 5 :(得分:1)

来自MySQL手册:

  

默认情况下,如果您没有自己为值分配值,则表中的第一个TIMESTAMP列会自动设置为最近操作的日期和时间。您还可以通过为任何TIMESTAMP列指定NULL值来将其设置为当前日期和时间。