Когда использовать datetime или timestamp [дубликат]


этот вопрос уже есть ответ здесь:

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

5 63

5 ответов:

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

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

информацию о MSDN

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

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

обновление

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

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

цитата Ссылка На MySQL

самое главное:

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

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

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

изменить - Просто чтобы обобщить свойства для MySQL и мой опыт работы с ним-

метка -

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

  • более низкий диапазон ('1970-01-01 00: 00: 01' UTC до '2038-01-09 03:14: 07' UTC), чем DATETIME - поэтому определенно не используйте его для дат рождения и т. д. Наиболее шаблоны использования должны фактически предоставлять "метку времени ""сейчас" для таких действий, как обновления строк и т. д.

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

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

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

  • так-если я добавлю '2011-01-01 3: 30' в метке времени (с часовым поясом curr как EST-Boston).. позже я изменяю часовой пояс сервера и mysql на PST (Калифорния) и перезапускаю сервер - значение изменится на '2011-01-01 00:00' -- (Пожалуйста, подтвердите... я проверил это уже давно). Однако дата и время останутся прежними.

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

e) в MySQL вы можете иметь несколько временных меток на таблица

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

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

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

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

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

Я не понял ваш вопрос ясно, но см. ниже ссылку. это может помочь вам

http://www.sqlteam.com/article/timestamps-vs-datetime-data-types

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

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

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

я, как правило, всегда выбираю DateTime.