2012-02-19 3 views
5

У меня есть таблица с этой колонкой:MySQL: Попытка вставить значение в метке времени выдает ошибку

last_modified timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

И, похоже, я не могу вставить строку с пользовательской меткой времени, я получаю эту ошибку :

Incorrect datetime value: '1145868501' for column 'last_modified' at row 1

Я пытаюсь заполнить эту таблицу данных, исходящие из другой таблицы, то другая таблица имеет только поле CREATION_TIME, который является DATETIME, поэтому я использую UNIX_TIMESTAMP (CREATION_TIME), чтобы заполнить временную метку.

Я думаю, что временная колонка с «DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP» не позволяет мне вставлять мои собственные вещи, я прав? Если да, то где официальный документ об этом и какое наилучшее решение? Сначала создайте простую временную метку, а затем измените таблицу после вставки данных?

Спасибо!

EDIT: поскольку люди советуют мне не использовать UNIX_TIMESTAMP, я должен сказать, что я не хотел использовать это в начале, но я получил такую ​​ошибку: Неверное значение даты и времени: '2010-03 -28 02:15:51 'для колонки «last_modified» Так что я думал, что мне нужно вставить «настоящую» временную метку ...

+1

Пробовал это без упаковки 'creation_time' с' UNIX_TIMESTAMP'? –

+0

На самом деле это то, что я пробовал в первую очередь, это тоже не сработало :-( –

+1

Что случилось? Как это не сработало? –

ответ

1

Вы можете в явном виде вставить значение в столбец TIMESTAMP. Читайте: TIMESTAMP Properties

The auto-update TIMESTAMP column, if there is one, is automatically updated to the current timestamp when the value of any other column in the row is changed from its current value. If all other columns are set to their current values, the TIMESTAMP column does not change. Automatic updating does not apply if the TIMESTAMP column is explicitly assigned a value other than NULL.


Update

Хехе, ошибка происходит потому, что - хорошо не было даты и времени с '2010-03-28 02:15:51'! Это было в летнее время разрыва (который обычно появляется какой-то день в марте, между 02:00 - 03:00 или 03:00 - 04:00

См:... Daylight Saving Time объяснение

+0

Хорошая добыча! Каким будет трюк? –

+0

Вам нужно знать, какой часовой пояс использовался для хранения этих дат. –

+0

Я боюсь, что я должен исправить эти даты один за другим, БД была размещена на нескольких серверах в течение последних 5 лет.Во всяком случае, у меня не должно быть слишком много строк с этой проблемой. Спасибо всем, кто нашел время, чтобы помочь мне! –

1

Вы пытаетесь поставить длинное целое в поле даты и времени, что не работает Отключив вызов UNIX_TIMESTAMP() и он должен работать

Тип MySQL TIMESTAMP практически идентичен DATETIME,... это просто какие-то дополнительные магические автообновления что касается SELECT, и UPDATE, то она является DATETIME.

+2

Не только автообновление, но и волшебство часовых поясов (что гораздо важнее) – zerkms

+0

Да. Но я хочу сказать, что это не временная метка Unix. :-) – staticsan

Смежные вопросы