Должен ли я использовать большой INT или обычный INT в MySQL для хранения метки времени? - PullRequest
10 голосов
/ 09 января 2010

Должен ли я использовать большое или обычное целое число в MySQL для хранения метки времени? Я планирую хранить его в INT, а не во встроенной метке времени или дате, так какой тип INT мне следует использовать?

Ответы [ 3 ]

14 голосов
/ 09 января 2010

Вы должны хранить его в метке времени, так как это, скорее всего, то, что СУБД оптимизирует для данных метки времени.

Мне любопытно, почему бы вам пожертвовать всей тяжелой работой, которую разработчики MySQL вложили в создание временных меток, работающих так, как они должны, и заменой их чем-то, что почти наверняка не будет работать так же.

Поскольку вы не указываете , почему вы хотите использовать целое число, я просто собираюсь предположить, что это было временное безумие, и вы скоро поправитесь: -)

13 голосов
/ 09 января 2010

Int перевернется в отрицательное значение в 2038 году (если вы используете метку времени UNIX): http://en.wikipedia.org/wiki/2038_problem.

поэтому BIGINT, вероятно, самый безопасный выбор

9 голосов
/ 09 января 2010

Я думаю, это полностью зависит от того, что вы хотите сделать. Есть несколько правильных типов для типов времени / даты (см .: http://dev.mysql.com/doc/refman/5.0/en/date-and-time-type-overview.html)

  • DATE - обычно 3 байта, диапазон: от 1000-01-01 до 9999-12-31.
  • DATETIME - 8 байтов, диапазон от 1000-01-01 00:00:00 до 9999-12-31 23:59:59
  • TIMESTAMP - диапазон 4 байта 1970-01-01 00:00:01 UTC до 2038-01-19 03:14:07 UTC. Затем следует учитывать некоторые семантические проблемы:

(int 4 байта, как TIMESTAMP, bigint 8 байтов, как DATETIME)

  • date хранит календарные дни, datetime и timestamp, и хранят дату + время с точностью до секунды (с точностью до секунды поддерживается в арифметике даты, но не для хранения)
  • отметка времени хранит значение UTC. Таким образом, любое значение, которое вы вставляете, преобразуется из часового пояса сеанса (по умолчанию, часового пояса сервера) в UTC и сохраняется. При извлечении значение UTC снова преобразуется обратно в часовой пояс, действующий в сеансе.
  • временная метка может быть объявлена ​​для автоматического получения текущей временной метки при вставке или обновлении или обоих. Вы лучше всего изучите руководство для деталей (см. http://dev.mysql.com/doc/refman/5.1/en/timestamp.html)
...