Опишите разницу типов данных DATETIME и TIMESTAMP
DATETIME и TIMESTAMP оба хранят дату и время, но различаются в способе хранения, диапазоне значений и обработке часовых поясов.
| Характеристика | DATETIME | TIMESTAMP |
|---|---|---|
| Хранимое значение | Дата и время «как есть» (YYYYMMDDHHMMSS) | Количество секунд с 01.01.1970 UTC |
| Размер | 8 байт | 4 байта |
| Часовой пояс | Не зависит от настроек сервера | Хранится в UTC, отображается с учётом часового пояса |
| Диапазон (MySQL) | 1000-01-01 — 9999-12-31 | 1970-01-01 — 2038-01-19 |
| Использование | Исторические даты, дата рождения | Время событий (created_at, updated_at) |
TIMESTAMP автоматически конвертирует значение в UTC при записи и обратно в часовой пояс клиента при чтении. Это делает его идеальным для хранения временных меток событий в распределённых системах. DATETIME хранит значение буквально — если записать 2026-05-17 15:00:00, именно это значение будет возвращено независимо от часового пояса.
Ограничение TIMESTAMP — проблема 2038 года: 32-битное целое число переполнится 19 января 2038 года. В PostgreSQL оба типа (timestamp и timestamptz) используют 8 байт и не имеют этого ограничения.
На собеседовании: ключевое —
TIMESTAMPзависит от часового пояса, аDATETIME— нет. Частая ошибка — не упомянуть проблему 2038 года для 4-байтовогоTIMESTAMP.