4

我有用户的数据库模式。看起来像...

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;

有六个字段:idusernamepasswordleveltimeemail,但我只想插入其中三个 - 当用户注册时:usernamepasswordemail。其余的将具有默认值。

问题是 MySQL 抛出错误:#1067 - Invalid default value for 'time'。有什么想法吗,伙计们?

4

4 回答 4

6

使用 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;
于 2011-03-16T08:28:59.417 回答
0

你需要使用TimeStampDateTime

`time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
于 2011-03-16T08:29:52.237 回答
0

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

于 2011-03-16T08:33:09.693 回答
0

当我的属性为“datetime”时,我们无法设置“DEFAULT CURRENT_TIMESTAMP”,因此我们将属性更改为“TIMESTAMP”,例如:

time * 日期时间* DEFAULT CURRENT_TIMESTAMP,

should be...

time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,

于 2012-12-20T05:20:44.130 回答