2015-04-09 2 views
0

Я пытаюсь добавить столбец last_updated в таблицу с существующими данными в ней. После выполнения инструкции ALTER TABLE я ожидаю, что для столбца last_updated для всех существующих данных будет установлено значение CURRENT_TIMESTAMP.MySQL 5.5 Изменение значения Time Time по умолчанию текущего значения, но оно установлено на 0 вместо

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. Являются ли мои ожидания неправильными здесь? Или я делаю что-то неправильно?

ответ

0

Ну, это старая ошибка Bug #68040: ALTER TABLE ADD COLUMN TIMESTAMP DEFAULT CURRENT_TIMESTAMP still inserts zero, решена из версии 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

+0

Спасибо за ссылку на ошибку! – user4770673