MySQL 5.5 改变 Table 时间戳默认为当前值,但它被设置为 0

MySQL 5.5 Alter Table TimeStamp default to Current Value, but it's being set to 0 instead

我正在尝试将 last_updated 列添加到 table 中,其中包含预先存在的数据。执行 ALTER TABLE 语句后,我希望将所有现有数据的 last_updated 列设置为 CURRENT_TIMESTAMP

ALTER TABLE TableName
ADD COLUMN last_updated TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP 
ON UPDATE CURRENT_TIMESTAMP

但是,对于所有预先存在的行,该值设置为 0000-00-00 00:00:00。任何后续插入都按预期使用 CURRENT_TIMESTAMP 创建。

我正在使用 MySQL 5.5。我的期望在这里不正确吗?还是我做错了什么?

好吧,这是一个老错误 Bug #68040: ALTER TABLE ADD COLUMN TIMESTAMP DEFAULT CURRENT_TIMESTAMP still inserts zero, solved from version 5.6.11 Changes in MySQL 5.6.11 (04/18/2013)

在5.5中,用一个13.5 SQL Syntax for Prepared Statements可以避免多一些代码的问题。

示例:

SET @`ddl` := CONCAT('ALTER TABLE `TableName`
                   ADD COLUMN `last_updated` TIMESTAMP NOT NULL
                   DEFAULT \'', CURRENT_TIMESTAMP(), '\'
                   ON UPDATE CURRENT_TIMESTAMP;');
PREPARE `stmt` FROM @`ddl`;
EXECUTE `stmt`;
DEALLOCATE PREPARE `stmt`;

ALTER TABLE `TableName`
MODIFY COLUMN `last_updated` TIMESTAMP NOT NULL
DEFAULT CURRENT_TIMESTAMP
ON UPDATE CURRENT_TIMESTAMP;

SQL Fiddle demo