Подтвердить что ты не робот

MySQL: что лучше всего использовать, Unix TimeStamp или DATETIME

Вероятно, многие кодеры хотят задать этот вопрос. это то, что есть приключения каждого из этих форматов времени MySQL. и какой из них вы предпочитаете использовать в своих приложениях.

Для меня я использую временную метку Unix, потому что, возможно, мне легко конвертировать и упорядочивать записи с ней, а также потому, что я никогда не пробовал DATETIME. но в любом случае я готов изменить свое мнение, если кто-нибудь скажет мне, что я неправ.

Спасибо

4b9b3361

Ответ 1

Временная метка (как PHP, так и MySQL) хранится с использованием 32 битов (т.е. 4 байта); что означает, что они ограничены диапазоном дат, который идет с 1970 по 2038 год.

DATETIME не имеют этого ограничения, но сохраняются с использованием большего количества байтов (8 байтов, если я не ошибаюсь)


После этого между сохранением временных меток, как видно из PHP, или временными метками, как видно из MySQL:


Кроме того, для получения дополнительной информации о типах данных MySQL TIMESTAMP и DATETIME см. 10.3.1. Типы DATETIME, DATE и TIMESTAMP

Ответ 2

Как отмечали другие, временные метки могут представлять меньший диапазон времени (с 1970 по 2038 год). Тем не менее, временные метки измеряют количество секунд со времен Unix Epoch (1970-01-01 00:00:00 UTC), тем самым делая их независимыми от часового пояса, тогда как DATETIME сохраняет дату и время без часового пояса. Другими словами, временные метки однозначно ссылаются на конкретный момент времени, тогда как точный момент времени, к которому относится DATETIME, требует часовой пояс (который не сохраняется в поле DATETIME). Чтобы понять, почему это имеет значение, подумайте, что произойдет, если мы изменим часовой пояс.

Предположим, мы хотим сохранить дату-время 2010-03-27 12:00 UTC. Если мы сохраним это и выберем его с помощью метки времени или DATETIME, тогда обычно не будет никакой разницы. Однако, если сервер теперь изменяется так, что локальный часовой пояс UTC + 01, тогда мы получаем два разных результата, если мы вытаскиваем дату и время.

Если мы установили поле в DATETIME, оно сообщило бы о дате времени как 2010-03-27 12:00, несмотря на изменение часового пояса. Если мы установили поле в метку времени, дата будет указана как 2010-03-27 11:00. Это не проблема ни с одним типом данных - это просто результат того, что они хранят немного другую информацию.

Ответ 3

Это действительно зависит. Я приведу вам два примера, где один из них преодолевает другой:

Временная метка лучше, чем DATETIME, когда вы хотите сохранить сеанс пользователей в базе данных, а время создания сеанса (в формате Timestamp) используется для быстрого поиска строк (с индексом).
Например. таблица может выглядеть так:
[session_create_time AS Timestamp][IP_address AS 32bit Int][etc...]
Наличие индекса в первых двух столбцах может действительно ускорить ваши запросы. Если у вас есть тип значения DATETIME для поля session_create_time, тогда это может быть занято гораздо больше времени. Учтите, что запросы сеанса выполняются каждый раз, когда пользователь запрашивает страницу, поэтому эффективность имеет решающее значение.

DATETIME лучше, чем Timestamp, когда вы хотите сохранить дату рождения пользователя или некоторые исторические события, требующие гибкого временного диапазона.

Ответ 4

Без оцифровки записей до 1 января 1970 года мне нравится эпоха UNIX. Его просто вопрос предпочтения, целые беззнаковые числа проще обрабатывать при использовании нескольких языков.

Просто имейте в виду, что эпоха начинается с 1 января 1970 года. Многие компании работали на протяжении десятилетий, если не дольше, до этого.