2011-03-16 82 views
4

我有用户的数据库架构。它看起来像......数据库架构,默认值是NOW()

CREATE TABLE `users` (

`id` int(8) unsigned AUTO_INCREMENT, 
`username` varchar(255), 
`password` varchar(40), 
`level` tinyint(1) unsigned DEFAULT 1, 
`time` datetime DEFAULT NOW(), 
`email` varchar(255), 

PRIMARY KEY (`id`) 

) ENGINE=InnoDB; 

有六个领域:ID用户名密码水平时间电子邮件,但我想只插入三个他们 - 当用户注册时:用户名,密码电子邮件。其余的将有默认值。

问题是MySQL抛出错误:#1067 - 'time'的默认值无效。任何想法,家伙?

回答

5

使用CURRENT_TIMESTAMP,并将列更改为时间戳。

它是一样的,但工程(只要你能忍受时间戳) - 这是一个限制。

讨论:

  1. http://bugs.mysql.com/bug.php?id=27645
  2. http://forums.mysql.com/read.php?61,67640,67771#msg-67771

所以,你创造成为

CREATE TABLE `users` (
`id` int(8) unsigned AUTO_INCREMENT, 
`username` varchar(255), 
`password` varchar(40), 
`level` tinyint(1) unsigned DEFAULT 1, 
`time` timestamp DEFAULT CURRENT_TIMESTAMP, 
`email` varchar(255), 
PRIMARY KEY (`id`) 
) ENGINE=InnoDB; 
0

您需要使用TimeStampDateTime

`time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP, 
0

通常,MySQL不支持将函数作为默认值。据我所知,只有一个例外:您可以将CURRENT_TIMESTAMP分配到TIMESTAMP列。因此,您需要更改列类型(注意TIMESTAMP不如DATETIME那么强大),或者依靠触发器填充值。

0

我们不能让 “默认CURRENT_TIMESTAMP” 当我的属性是 “日期时间”,所以我们将改变我们的属性为 “时间戳”,如:

time*日期时间* DEFAULT CURRENT_TIMESTAMP,

should be... 

timeTIMESTAMP DEFAULT CURRENT_TIMESTAMP,