2013-06-27 6 views
0

Быстрый вопрос, на который я не могу найти хороший ответ. Когда я начал с PHP и mySQL, я научился хранить даты/время как временные метки Unix. Тип данных mySQL был BIGINT, а функция даты PHP отлично справилась с этим. Поскольку я смотрю документацию и, похоже, что тип данных Timestamp становится все более заметным. является ли способ сохранения даты устаревания BIGINT? Существует ли общая школа мысли о том, какой из этих методов лучше использовать сейчас?Тип данных для хранения дат в mySQL

Я знаю, что тип данных timestamp имеет «текущую временную метку» для значений по умолчанию или обновлений, которые хороши.

мысли?

заранее спасибо

+0

Там также DATE и DATETIME типов данных, я обычно использую один из них. – Barmar

ответ

1

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

Одним из преимуществ timestamp является то, что программное обеспечение понимает, что число действительно является датой и покажет человекообразную дату. Это всегда проблема при хранении дат int.

Одно дело иметь в виду, хотя timestamp не работает в датах до 1 января 1970 года, но это ничем не отличается от подхода int.

+0

спасибо за ввод. технически INTs работают до 1970 года, если вы разрешили подписывать ints, но я редко это делаю. это поднимает еще один вопрос. Я использую BIGINT, поэтому верхний предел 2038 меня не затрагивает. как это сделать/будет иметь дело с этим? –

+0

От dev.mysql.com> _TIMESTAMP имеет диапазон '1970-01-01 00:00:01' UTC to '2038-01-19 03:14:07' UTC._ - Я буду считать, что когда возникает необходимость, они найдут способ увеличить верхнюю границу. Если вы беспокоитесь о новой ошибке тысячелетия, вы можете беспокоиться об этом через 25 лет. – Halcyon

1

Andrew, вы не должны использовать какой-либо тип данных INT для сохранения даты. MySQL предлагает широкий выбор опций, таких как TIMESTAMP (как вы упомянули), DATETIME, DATE, TIME, YEAR. Кроме того, вы можете использовать собственные функции времени MySQL проще. Поэтому нет причин действительно использовать какой-либо другой тип данных.

[EDIT]

MYSQL documentation довольно четкое представление о своих типов данных:

The DATETIME type is used for values that contain both date and time parts. MySQL retrieves and displays DATETIME values in ‘YYYY-MM-DD HH:MM:SS’ format. The supported range is ’1000-01-01 00:00:00′ to ’9999-12-31 23:59:59′. 

The TIMESTAMP data type is used for values that contain both date and time parts. TIMESTAMP has a range of ’1970-01-01 00:00:01′ UTC to ’2038-01-19 03:14:07′ UTC. 
+0

, как я уже сказал, тип timestamp для меня новичок. это хорошо работает с PHP? он просто рассматривает его как строку, или я могу использовать функцию date() для ее форматирования? также как это сделать/справиться с верхним пределом 2038? –

+0

Andrew, я отредактировал свой ответ на ваш вопрос. ;-) – medina