MySQL. DATETIME или TIMESTAMP?

Тип TIMESTAMP в MySQL обычно используется, чтобы оставить информацию о изменении записи, и, как правило, поле с этим типом обновляется каждый раз, когда меняется запись. Если Вы хотите сохранить определённое значение времени, Вам стоит использовать поле «DATETIME».

Ещё один важный нюанс: в MySQL и выше, значения в TIMESTAMP при записи конвертируются базой из местного времени во время по UTC, а при выборке — конвертируются назад, в местное время (Если точнее — во время, которое потребовал сервер). При DATETIME и других форматах времени такого не происходит, время хранится в «статическом» формате, если можно так сказать.

Также отмечу, что если выбирать между UNIX-вским TIMESTAMP или родным MySQL-ским DATETIME, то лучше выбрать родной формат. Почему? Вы сможете использовать встроенные функции MySQL (например так: SELECT DATE_ADD(my_datetime, INTERVAL 1 DAY)). Кроме того, если надо будет произвести операции с временем на PHP, сохранится возможность легко получить значение в UNIX timestamp с помощью самого запроса (SELECT UNIX_TIMESTAMP(my_datetime)). Но надо принимать во внимание предыдущий абзац и иметь ввиду разницу в часовых поясах.