13

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

不幸的是,使用属性设置的是字段“date_created”,on update CURRENT_TIMESTAMP无论我做什么,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
4

2 回答 2

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
于 2011-02-26T11:13:23.783 回答
0

从 MySQL 版本 5.6.6 开始,您可以在配置文件中使用explicit_defaults_for_timestamp选项,因此默认情况下时间戳列将没有“DEFAULT CURRENT_TIMESTAMP”或“ON UPDATE CURRENT_TIMESTAMP”属性。如果这些列未声明为 NOT NULL,也可以将它们设置为 NULL。

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

于 2014-07-16T08:43:41.473 回答