2012-06-12 77 views
2

我试图创建这些表:DATETIME默认值0 MYSQL 5.5.25

CREATE TABLE IF NOT EXISTS `qa_discountcoupons` (
    `discount_code` INT NOT NULL AUTO_INCREMENT , 
    `status_code` INT NOT NULL , 
    `discount_date` DATETIME NOT NULL DEFAULT 0 , 
    PRIMARY KEY (`discount_code`) , 
    INDEX `discounts_to_status` (`status_code` ASC) , 
    CONSTRAINT `discounts_to_status` 
    FOREIGN KEY (`status_code`) 
    REFERENCES `qa_status` (`status_code`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION) 
ENGINE = InnoDB; 

,但我得到这个错误:

Error Code: 1067. Invalid default value for 'discount_date' 
+0

查看类似的问题 http://stackoverflow.com/questions/168736/how-do-you-set-a-default-value-for-a-mysql-datetime-column – PriestVallon

回答

3

您可以使用:

CREATE TABLE IF NOT EXISTS `qa_discountcoupons` (
`discount_code` INT NOT NULL AUTO_INCREMENT , 
`status_code` INT NOT NULL , 
`discount_date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP , 
PRIMARY KEY (`discount_code`) , 
INDEX `discounts_to_status` (`status_code` ASC) , 
CONSTRAINT `discounts_to_status` 
FOREIGN KEY (`status_code`) 
REFERENCES `qa_status` (`status_code`) 
ON DELETE NO ACTION 
ON UPDATE NO ACTION) 
ENGINE = InnoDB; 
来自MySQL 5.6.5及更高版本的

我还建议检查How do you set a default value for a MySQL Datetime column?上的线程 - 对此有很多评论。

+1

有任何方法将其设置为0 ? –

+4

嗯 - 0不是一个真正的日期 - 但是你可以选择一些任意的日期,并将它用作你的“空白点” - 比如1970年1月1日之类的东西。 一个好的设计虽然会使用NULL。 – Kerbocat

+3

如果您的SQL模式不包含'NO_ZERO_DATE'(http://dev.mysql.com/doc/refman/5.5/en/server-sql-mode.html#sqlmode_no_zero_date),您可以*执行'discount_date DATETIME NOT NULL DEFAULT'0000-00-00''但是按照Kerbocat的建议,'NULL'是绝对可取的。 – RandomSeed