2014-11-22 71 views
0

有人能告诉我我在这个查询中缺少什么吗?它不断想出:EndDate的错误1067无效默认值

错误1067:无效的默认值EndDate

CREATE TABLE `course_info`(
`student_id` VARCHAR (35), 
`course_id` INT NOT NULL AUTO_INCREMENT, 
`name`  VARCHAR(45) NOT NULL, 
`module` VARCHAR(45) NOT NULL, 
`StartDate` TIMESTAMP, 
`EndDate` TIMESTAMP, 
`course_Update` TIMESTAMP, 
PRIMARY KEY(`course_id`), 
FOREIGN KEY(`student_id`) 
REFERENCES student(`student_id`) 
) 
ENGINE = InnoDB; 

回答

1

你可以了解你的错误从官方documentation的原因:

的NO_ZERO_DATE模式会影响服务器是否允许'0000-00-00' 作为有效日期。其效果也取决于严格SQL模式是否启用了 。

  • 如果未启用此模式,则允许使用'0000-00-00',插入不会产生警告。
  • 如果启用此模式,则允许使用'0000-00-00',插入会产生警告。
  • 如果启用了此模式和严格模式,则不允许使用'0000-00-00',并且插入会产生错误,除非IGNORE良好地给出为 。对于INSERT IGNORE和UPDATE IGNORE,允许使用'0000-00-00' ,插入会产生警告。

,因为它说,你可以插入0000-00-00日期与IGNORE选项。这是为了插入。

在你的情况,你所要做的就是在NOT NULL约束添加到您的TIMESTAMP领域,以避免默认值0000-00-00如下:

StartDate TIMESTAMP NOT NULL, 
EndDate TIMESTAMP NOT NULL, 
course_Update TIMESTAMP NOT NULL, 

编辑1:

在您的评论之后,如果您在Windows上启用严格的SQL模式,则需要编辑my.cnf文件(如果您位于Linux或my.ini文件中)。你会发现如何做到这一点SQL-mode

+0

我做了你告诉我要做的事情,但它仍然会出现相同的错误。 :S – Edrian 2014-11-22 13:19:40

+0

@Edrian就像你在你的问题上所说的那样声明你的表并且你有同样的错误? – 2014-11-22 13:22:45

+0

@Edrian你使用的是linux还是windows? – 2014-11-22 13:24:11

相关问题