Unix timestamp VS datetime

Возможный дубликат:
datetime vs timestamp?

У меня есть таблица Mysql, в которой есть столбец add_date . Он отслеживает дату / время, когда запись была добавлена ​​в базу данных.

Запросы, основанные на этой таблице:

  1. Показывать, когда запись была добавлена ​​в формате: 2 часа назад, 4 недели назад, 1 год назад и т. Д.
  2. Разрешить пользователям поиск записей, вставленных в любой день / месяц / год. Таким образом, пользователю может быть разрешено выбирать записи только в 2009 году.

Что было бы лучше в этом случае – timestamp unix или datetime?

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

Временная метка Unix, по-видимому, лучше для преобразования в формат 2 hours назад в PHP, а также независимая от часовой пояс. Но datetime имеет лучшую читаемость, и сделать запрос для конкретной даты / времени / года представляется проще.

Ваше предложение?

Когда у вас будет выбор, я бы сказал, что выходите на даты mySQL.

  • Вам не придется заботиться о выпуске диапазона дат

  • Вы можете легко запросить промежутки времени, используя функции даты BETWEEN(), DATE_ADD ( BETWEEN(), DATE_ADD и т. Д.).

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

  • Это детская игра для преобразования полей DATE в временные метки UNIX, когда это необходимо.

Я бы пошел для форматов mysql, просто потому, что mysql имеет множество функций datetime, чтобы использовать, что с timestamp будет стоить вам другого преобразования.

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

о мой.
вы действительно обеспокоены в 4 дополнительных мегабайтах пространства?

Вы можете получить лучшее из обоих миров, используя from_unixtime() метку unix и from_unixtime() MySQL from_unixtime() для преобразования результата в формат даты и времени, где это необходимо.