我记得我在某处读过mySQL时间戳数据类型用于在行更新时自动更新,这是真的吗?
我是否必须使用timestamp数据类型或bigint存储时间戳?
注意:mySQL不会生成必须存储的时间戳,它是使用PHP生成的预定义值。
感谢。
答案 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值来将其设置为当前日期和时间。