数据库架构,默认值为NOW()

时间:2011-03-16 08:26:54

标签: mysql datetime time mysql-error-1067

我有用户的数据库架构。它看起来像......

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 用户名密码级别时间电子邮件,但我只想插入三个 - 当用户注册时:用户名密码电子邮件< / em>的。其余的将具有默认值。

问题是MySQL抛出错误:#1067 - “时间”的默认值无效。任何想法,伙计们?

4 个答案:

答案 0 :(得分:5)

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

它做同样的事情但是有效(只要你可以使用时间戳) - 这是一个限制。

讨论:

  1. http://bugs.mysql.com/bug.php?id=27645
  2. http://forums.mysql.com/read.php?61,67640,67771#msg-67771
  3. 所以你的创造就变成了

    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;
    

答案 1 :(得分:0)

您需要使用TimeStamp而不是DateTime

`time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

time * datetime * DEFAULT CURRENT_TIMESTAMP,

should be...

time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,