2013-04-15 3 views
0

Как четко указано Should I use field 'datetime' or 'timestamp'?, основные различия между DATETIME и поля TIMESTAMP являются:Синхронизация между DATETIME и TIMESTAMP

  1. TIMESTAMP в MySQL, как правило, используются для отслеживания изменений в записи, и автоматически обновляется каждый раз, когда запись изменяется.
  2. DATETIME представляет собой дату (как указано в календаре) и время (как можно наблюдать на настенных часах), тогда как TIMESTAMP представляет собой четко определенный момент времени.
  3. Только значения TIMESTAMP преобразуются из текущего часового пояса в UTC для хранения и преобразуются обратно из UTC в текущий часовой пояс для извлечения.

У меня есть таблица, которая содержит столбец date_created и столбец date_modified. Я сделал date_created как DATETIME, поэтому он не получает переопределения при каждом обновлении записи и делает date_modified как TIMESTAMP, поэтому он обновляется каждый раз, когда запись обновляется.

Как сохранить два синхронизированных? Например, после первоначального создания записи столбцы date_created и date_modified, они будут одинаковыми. Позже, если запись никогда не менялась, они должны оставаться неизменными независимо от временных зон и летнего времени, нет?

ответ

2

Пункт 1 в вашем списке не совсем корректен. DEFAULT CURRENT_TIMESTAMP и ON UPDATE CURRENT_TIMESTAMP - это опции, которые могут быть применены к полю TIMESTAMP (а теперь и в поле 5.6 a DATETIME). Они не являются неотъемлемыми свойствами TIMESTAMP. Если вы используете версию до 5.6, вы, вероятно, должны использовать TIMESTAMP для обоих полей.

CREATE TABLE my_tbl 
    (date_created TIMESTAMP DEFAULT CURRENT_TIMESTAMP, 
    date_modified TIMESTAMP ON UPDATE CURRENT_TIMESTAMP) 

date_created получит текущую метку времени, когда запись создается и date_modified будет приготовьтесь к текущей метке времени, когда обновляется запись (вы можете предотвратить это с date_modified = date_modified в обновлении).

Если вы используете MySQL 5.6, вы можете использовать DATETIME и получить такое же поведение.

http://dev.mysql.com/doc/refman/5.6/en/timestamp-initialization.html

+0

Спасибо, Андрей. Похоже, ключевой момент - сделать их одинаковыми. Если я хочу, чтобы пользователь увидел это значение (т. Е. Я показываю «последнее обновление от John Doe в 12:00 PM 5/5/2013»), лучше использовать временную метку или дату-время? – user1032531

+0

Вы уверены? Я попробовал и получил: # 1293 - неправильное определение таблицы; может быть только один столбец TIMESTAMP с CURRENT_TIMESTAMP в разделе DEFAULT или ON UPDATE. – user1032531

+0

С 5.5 я не думаю, что ваше решение будет работать: Один столбец TIMESTAMP в таблице может иметь текущую временную метку в качестве значения по умолчанию для инициализации столбца, поскольку значение автоматического обновления или и то, и другое. Невозможно, чтобы текущая временная метка была значением по умолчанию для одного столбца и значением автоматического обновления для другого столбца. – user1032531

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