我有一个用这个SQL创建的表:
CREATE TABLE `test_table` (
`id` BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
`data` TEXT,
`timestamp` TIMESTAMP
) CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE InnoDB;
但是当我运行SHOW CREATE TABLE test_table
时,我得到:
CREATE TABLE `test_table` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`data` text COLLATE utf8_unicode_ci,
`timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
为什么默认情况下会为时间戳列分配 ON UPDATE CURRENT_TIMESTAMP ?我不知道怎么摆脱这个。任何帮助将不胜感激。
答案 0 :(得分:3)
如果您想要timestamp
,则不会自动添加ON UPDATE
,您必须像这样定义
CREATE TABLE `test_table` (
...
`timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
) ...
答案 1 :(得分:1)
使用日期时间字段
Should I use field 'datetime' or 'timestamp'?
MySQL中的时间戳通常用于跟踪记录的变化,以及 每次更改记录时都会更新。如果你想 存储您应该使用日期时间字段的特定值。
如果您想要决定使用UNIX时间戳还是 本机MySQL日期时间字段,使用本机格式。你可以做 MySQL中的那种计算方式(“SELECT DATE_ADD(my_datetime, INTERVAL 1 DAY)“)并且更改值的格式很简单 你的UNIX时间戳(“SELECT UNIX_TIMESTAMP(my_datetime)”) 如果你想用PHP操作它,请查询记录。