Разница datetime и timestamp

Datetime и timestamp типы данных в MySQL для хранения информации по дате. Их основные отличия:

#####Datetime

  • 8 байт без часового пояса
  • DEFAULT CURRENT_TIMESTAMP / ON UPDATE CURRENT_TIMESTAMP устанавливает время по умолчанию (MySQL 5.6.5)
  • Запросы не кешируются по умолчанию

#####Timestamp

  • 4 байта с часовым поясом
  • хранит время UTC(Гринвич)
  • в версии до MySQL 5.6.1 не более 2 TIMESTAMP колонок в одной таблице, в версии MySQL 5.6.5+ без ограничений
  • Запросы кешируются по умолчанию
  • Свойство DEFAULT CURRENTTIMESTAMP / ON UPDATE CURRENTTIMESTAMP может быть примененно только для одной колонке:

      CREATE TABLE `test` (
        `id` INT(10) UNSIGNED NOT NULL,
        `AddedDate` TIMESTAMP NOT NULL DEFAULT 				CURRENT_TIMESTAMP,
        `UpdatedDate` TIMESTAMP NOT NULL DEFAULT 		CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
        ) ENGINE=INNODB;
    

Ошибка:

	Error Code : 1293
	Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause

####Когда использовать:

#####datetime:

  • Колонки с фиксированными данными(логирование, день рождения, данные о покупке и т.п)
  • Хорошая ассоциация datetime это часы и календарь на стене, при этом не важно в какой часовой зоне находиться дом в котором они висят.

#####timestamp:

  • Колонки с часто обновляемыеми данными(последняя авторизация пользователя, дата и время обновления рейтинга/очков/счета и т.п.)
  • Ассоциация: момент времени, т.е. как давно событие. Точный расчет момент времени напрямую зависит от того в каком часовом поясе вы находитесь.

Ссылки: