Когда использовать дату и время

Я искал это, но не дал ясных ответов (особенно на последних). В каких случаях следует использовать дату или время?

Ответ 1

Предполагая, что вы используете MS SQL Server (чего нет, см. Обновление ниже):

В таблице может быть только одна метка времени колонка. Значение в метке времени колонка обновляется каждый раз, когда строка содержащий столбец временной метки вставлен или обновлен. Это свойство делает столбец временной шкалы плохим кандидат на ключи, особенно первичный ключи. Любое обновление, сделанное в строке изменяет значение метки времени, тем самым изменение значения ключа. Если столбец находится в первичном ключе, значение старого ключа больше не действует, а внешние ключи ссылаясь на старое значение, нет более длительный срок действия. Если таблица ссылки в динамическом курсоре, все обновления меняют положение строки в курсоре. Если столбец в ключе индекса, все обновления для строка данных также генерирует обновления индекс.

Информация о MSDN

Если вам нужно хранить информацию о дате/времени в строке и не менять дату/время, используйте DateTime; в противном случае используйте временную метку.

Также примечание:. Временные метки MS SQL Server не являются датами и временами, они являются двоичными представлениями относительной последовательности, когда данные были изменены.

Update

Как вы обновили, чтобы сказать MySQL:

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

Цитата из Справочник по MySQL

Более заметно:

Если вы сохраняете значение TIMESTAMP и затем изменить часовой пояс и получить значение, полученное значение отличается от сохраненного вами значения.

Итак, если вы используете приложение в часовых поясах и вам нужно указать дату/время, чтобы отразить отдельные настройки пользователей, используйте Timestamp. Если вам нужна согласованность, независимо от часового пояса, используйте Datetime

Ответ 2

Смотрите Должен ли я использовать поле 'datetime' или 'timestamp'? Он имеет всестороннее освещение темы.

РЕДАКТИРОВАТЬ - Просто, чтобы суммировать свойства для MySQL и мой опыт с ним -

Временная метка -

a) 4 байта на столбец (по сравнению с 8 для даты и времени)

  • LOWER RANGE ('1970-01-01 00:00:01' UTC to '2038-01-09 03:14:07' UTC) THAN DATETIME - Так что определенно не используйте его для дат рождения и т.д. шаблоны должны фактически предоставлять "отметку времени" для "СЕЙЧАС" для таких действий, как обновления строк и т.д. и т.д.

b) хранится внутри как целое

  • Производительность мудрая... мой личный опыт был неоднозначным.. иногда его быстрее... иногда медленнее, чем DATETIME. Это занимает меньше места, хотя.

c) Имеет информацию о часовом поясе!

  • so - если я добавлю '2011-01-01 3:30' в TIMESTAMP (с часовым поясом в часах как EST - Boston). Позднее я меняю сервер и часовой пояс mysql на PST (california) и перезагружаю сервер - значение изменится на "2011-01-01 00:00" - (ПОЖАЛУЙСТА, ПОДТВЕРЖДАЙТЕ... я давно это испытал). Однако DATETIME останется прежним.

d) Все функции DATE()/DAY()/MONTH() работают как для TIMESTAMP, так и для DATETIME

e) В MySQL вы можете иметь несколько TIMESTAMPS для таблицы

  • (ДА, однако только один из них (первый) будет автоматически обновляться со временем обновления строки, также... только один может быть сделан NOT NULL (думаю, первый))

f) первый TIMESTAMP в таблице автоматически обновляется...

  • Поэтому будьте осторожны, если вы используете его для других целей.. и хотите разрешить там null. (null хранится как "0000-00-00 00:00:00" как в DATETIME, так и в TIMESTAMP)

Я использовал несколько временных меток для других целей. Необходимое пространство было сохранено (должно быть очень осторожным и учитывать все эти проблемы.

Мой совет, идите в TIMESTAMP для целей без отметки времени, только если вы знаете, что вы делаете.. и если SPACE вызывает огромную озабоченность (мои eg - 15 000 000 строк и растут и 8 datetimes!))

Ответ 4

Необходимо указать сервер базы данных.

Некоторые серверные механизмы автоматически обновляют поля метки времени, поэтому их можно использовать в качестве версии записи в Оптимистическое блокирование

Ответ 5

  • В MySQL, в DateTime вы можете работать с DATE() связанными функциями, тогда как timestamp вы не можете.
  • timestamp не может сохранять значения до 01-01-1970.
  • Кроме того, у одного из них есть дневная экономия, а у других нет (я не помню, какой именно сейчас).

Я обычно выбираю DateTime.