我正在尝试创建一个只有日期的时间戳。 这就是我开始工作的原因。
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)
);
答案 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'。