如何在mysql中创建只有日期的时间戳?

时间:2012-03-26 05:11:53

标签: mysql sql timestamp

我正在尝试创建一个只有日期的时间戳。 这就是我开始工作的原因。

create table verses 
( 
     id INT AUTO_INCREMENT NOT NULL PRIMARY KEY, 
     username VARCHAR(255), 
     content VARCHAR(1023), 
     time DATE
);

insert into verses (username, content, time) 
values ('test', 'blbabblabalbla', CURDATE());

这可以,但我需要每次插入时间。有没有办法自动完成这个? 和我们使用TIMESTAMP时的情况类似? 我确实试过这个,但没有工作

create table verses 
( 
   id INT AUTO_INCREMENT NOT NULL PRIMARY KEY, 
   username VARCHAR(255), 
   content VARCHAR(1023), 
   time CURDATE(TIMESTAMP)
);

5 个答案:

答案 0 :(得分:1)

您必须将字段设置为datetime而不是date

文档也说:

  

从MySQL 5.6.5开始,TIMESTAMP和DATETIME列可以自动初始化并更新到当前日期和时间[...]

还有:

  

对于表中的任何TIMESTAMP或DATETIME列,您可以将当前时间戳分配为默认值,自动更新值或两者。自动初始化列设置为插入行的当前时间戳,该列不指定列的值。 [...]

如果您想了解更多相关信息,请参阅official documentation

答案 1 :(得分:1)

最简单的方法是插入日期(now())而不是curdate()

答案 2 :(得分:0)

尝试使用DateTime而不是DATE类型来存储时间。至于插入日期和时间,使用NOW()函数而不是DATE()。请参阅link以供参考。

答案 3 :(得分:0)

理论上,您可以设置DEFAULT值,如下所示:

create table verses ( id INT AUTO_INCREMENT NOT NULL PRIMARY KEY, 
    username VARCHAR(255), content VARCHAR(1023), time DATE DEFAULT CURDATE());

然而,似乎在mySQL中这是不可能的:

  

DEFAULT子句指定列的默认值。有一个   例外,默认值必须是常量;它不可能是一个   功能或表达。

所以,您需要使用TIMESTAMP或手动维护,抱歉。从技术上讲,这仍然是手动的,但您可以使用trigger

模拟自动过程

答案 4 :(得分:0)

您可以创建BEFORE INSERT触发器并始终为time字段设置'CURDATE'。