我有用户的数据库架构。它看起来像......
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 - “时间”的默认值无效。任何想法,伙计们?
答案 0 :(得分:5)
使用CURRENT_TIMESTAMP,并将列更改为时间戳。
它做同样的事情但是有效(只要你可以使用时间戳) - 这是一个限制。
讨论:
所以你的创造就变成了
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,