为什么MySQL不允许我删除属性“更新CURRENT_TIMESTAMP”?

时间:2011-02-26 10:32:45

标签: mysql phpmyadmin mysql-error-1293

我有一个包含两个时间戳字段的表。我只是使用名称和类型TIMESTAMP定义它们,但由于某种原因,MySQL会自动设置其中一个使用默认值和属性on update CURRENT_TIMESTAMP。我计划在任一字段中没有默认值,但其中一个字段称为“date_updated”,所以我想我可以将提到的属性设置为该字段。

不幸的是,它是使用on update CURRENT_TIMESTAMP属性设置的字段“date_created”,无论我做什么,MySQL都不会让我删除它。

我已尝试编辑“date_created”字段并删除该属性。单击“保存”时,属性又回来了。我还尝试选择两个字段,从其中一个字段中删除属性并在另一个字段上设置它。它给了我错误#1293 - Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause,突然两个属性列的值都设置为on update CURRENT_TIMESTAMP结果:

Error
SQL query:

ALTER TABLE  `pages` CHANGE  `date_created`  `date_created` TIMESTAMP NOT NULL ,
CHANGE  `date_updated`  `date_updated` TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL

MySQL said: 

#1293 - Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause 

我是否必须以正确的顺序重新创建这两列以解决此问题?

我想知道如何正确解决这个问题,以备将来参考。

由于


现在我也尝试了

ALTER TABLE pages
CHANGE date_created
 date_created TIMESTAMP NOT NULL

2 个答案:

答案 0 :(得分:16)

您应指定 DEFAULT CURRENT_TIMESTAMP (或DEFAULT 0

ALTER TABLE pages CHANGE date_created date_created TIMESTAMP NOT NULL DEFAULT 0,
CHANGE  `date_updated`  `date_updated` TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL

答案 1 :(得分:0)

从MySQL 5.6.6版开始,您可以在配置文件中使用 explicit_defaults_for_timestamp 选项,因此时间戳列不会有“DEFAULT CURRENT_TIMESTAMP”#39 ;或者' ON更新CURRENT_TIMESTAMP'默认情况下属性。如果未将这些列声明为NOT NULL,也可以将这些列设置为NULL。

请参阅:http://dev.mysql.com/doc/refman/5.6/en/server-system-variables.html#sysvar_explicit_defaults_for_timestamp