Должен ли я использовать тип данных datetime или timestamp в MySQL?

Вы порекомендовали бы использовать datetime или timestamp и почему (используя MySQL)?

Я работаю с PHP на стороне сервера.

+2500
03 янв. '09 в 16:14
источник поделиться
37 ответов
  • 1
  • 2

Я просто использую unsigned BIGINT при сохранении UTC...

который по-прежнему можно настроить на локальное время в PHP.

DATETIME выбирается с помощью FROM_UNIXTIME( integer_timestamp_column ).

Очевидно, что в этом столбце должен быть установлен индекс, иначе не было бы прогресса.

+4
23 мая '16 в 11:20
источник

Связанные вопросы


Похожие вопросы

Пока не указано, что DEFAULT CURRENT_TIMESTAMP работает только с полями Timestamp, но не с типом DateTime.

Это становится актуальным для таблиц MS Access, которые могут использовать только DateTime, но не Timestamp.

+4
03 нояб. '16 в 19:27
источник

Многие ответы здесь предлагают хранить как временную метку в случае, когда вы должны представлять четко определенные моменты времени. Но вы также можете иметь моменты времени с datetime, если вы сохраняете их все в UTC по соглашению.

+3
28 июн. '16 в 7:50
источник

Я перестал использовать datetime в своих приложениях после того, как столкнулся со многими проблемами и ошибками, связанными с часовыми поясами. ИМХО в большинстве случаев использовать timestamp лучше, чем datetime время.

Когда вы спрашиваете, который час? и ответ приходит как что-то вроде "2019-02-05 21:18:30", это не завершенный, не определенный ответ, потому что ему не хватает другой части, в каком часовом поясе? Вашингтон? Москва? Пекин?

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

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

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

    SET time_zone = '+2:00';
    
  2. Вы изменили страну, в которой находитесь, и продолжили работу по сохранению данных, просматривая их в другом часовом поясе (без изменения фактических данных).

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

Короче

datetime= приложение поддерживает 1 часовой пояс (как для вставки, так и для выбора)

timestamp= приложение поддерживает любой часовой пояс (как для вставки, так и для выбора)


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

+3
05 февр. '19 в 19:18
источник

Если вы хотите ГАРАНТИРОВАТЬ, ваше приложение НЕ будет работать в феврале 2038 года, используйте TIMESTAMP. Обратитесь к вашему REFMAN за ДИАПАЗОНОМ поддерживаемых дат.

+1
29 мар. '19 в 14:54
источник

timestamp - это текущее время события, записанного компьютером через сетевой протокол времени (NTP).

datetime - это текущий часовой пояс, заданный в вашей конфигурации PHP.

0
30 июн. '18 в 0:20
источник

Разница между датой и временем

  1. Поддерживаемый диапазон для DATETIME: от "1000-01-01 00:00:00" до "9999-12-31 23:59:59", а для "TIMESTAMP" - "1970-01-01 00:00:01" UTC для '2038-01-09 03:14:07' UTC.

  2. До MySQL 5.6.4 для хранения данных TIMESTAMP требовалось 4 байта (+3 байт за доли секунды), в то время как DATETIME требуется 8 байтов (+3 байт для доли секунды).

  3. Начиная с MySQL 5.6.4, для DATETIME требуется 5 байтов + 3 дополнительных байта для хранения данных за доли секунды.

    4.В MySQL5+ значение TIMESTAMP преобразуется из текущего времени в UTC и наоборот, тогда как DATETIME не выполняет никакого преобразования.

  4. TIMESTAMP отличается от текущих настроек часового пояса, в то время как DATETIME остается постоянным. Данные TIMESTAMP могут быть проиндексированы, а данные DATETIME - нет.

  5. Запросы с DATETIME не будут кэшироваться, но запросы с TIMESTAMP будут кэшироваться.

0
06 июн. '19 в 10:11
источник
  • 1
  • 2

Посмотрите другие вопросы по меткам или Задайте вопрос