Php 在mySQL中存储时间戳

Php 在mySQL中存储时间戳,php,mysql,timestamp,Php,Mysql,Timestamp,我记得我在某处读到mySQL时间戳数据类型用于在行更新时自动更新,这是真的吗 我必须使用timestamp数据类型或bigint来存储时间戳吗 注意:必须存储的时间戳不是由mySQL生成的,它是将由PHP生成的预定义值 谢谢。可以使用列定义中的更新当前时间戳时的将类型的列设置为自动更新 但是,这不会在插入记录时填充。如前所述,您可以用PHP构建时间戳(格式:YYYY-MM-DD HH:MM:SS)并将其插入,或者可以在列定义中设置另一个列属性DEFAULT CURRENT_timestamp 有

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

我必须使用timestamp数据类型或bigint来存储时间戳吗

注意:必须存储的时间戳不是由mySQL生成的,它是将由PHP生成的预定义值


谢谢。

可以使用列定义中的更新当前时间戳时的
类型的列设置为自动更新

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

有关更多信息:

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

SELECT UNIX_TIMESTAMP(your_column_name) FROM your_table_name
要使用unix时间戳插入,您可以使用\u UNIXTIME()中的


好的,我想这已经解决了

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

谢谢

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

我必须使用timestamp数据类型或bigint来存储时间戳吗

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

来自MySQL手册:

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


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

实际上,
时间戳是使用UNIX时间戳在内部存储的。MySQL函数可用于获取unix值。如果需要自动更新功能,请使用TIMESTAMP并使用
unix\u TIMESTAMP()
“所以它必须是BIGINT”,不需要,它是一个
int(11)
。当行被更新时,TIMESTAMP字段会自动更新。确切地说,它是一个有符号整数,最大数字为2147483647,与2038-01-19 03:14:07.999999(时间戳数据类型的限制)相同。我很好奇这个日期之后会发生什么。我认为这将在即将发布的版本中改变。但如果您实际上必须存储高于此限制的值,那么我建议将其存储为bigint unsigned。此外,您不能将其用于1970-01-01之前的日期。
INSERT INTO (your_table_name) (your_column_name) VALUES (FROM_UNIXTIME(your_bigint_value));
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;