Правильный способ хранения даты MySQL после 2037 года

Я пытаюсь сохранить в MySQL поле date() с последовательной датой до 2037 года.

Например: 2065-12-01

Проблема в том, что поле возвращается: 1969-12-31

Как правильно записать эти значения в БД? Должен ли я использовать VARCHAR?

Я вычисляю date значение поля вот так:

 $future_date = date('Y-m-d', strtotime("+$number_years_to_add years"));

2 ответа

Вы, вероятно, используете поле метки времени для хранения дат, а не поле даты и времени.

Смотрите документацию mysql о типах данных datetime, а именно:

Тип DATE используется для значений с частью даты, но без части времени. MySQL извлекает и отображает значения DATE в формате "ГГГГ-ММ-ДД". Поддерживаемый диапазон: от 1000-01-01 до 9999-12-31.

Тип DATETIME используется для значений, которые содержат как дату, так и время. MySQL извлекает и отображает значения DATETIME в формате "ГГГГ-ММ-ДД ЧЧ: ММ: СС". Поддерживается диапазон от 1000-01-01 00:00:00 до 9999-12-31 23:59:59.

Тип данных TIMESTAMP используется для значений, которые содержат как дату, так и время. У TIMESTAMP есть диапазон от "1970-01-01 00:00:01" UTC до "2038-01-19 03:14:07" UTC.

Мне кажется, что вы используете PHP date а также strtotime вещи на 32-битной платформе. Эти функции превращаются в тыкву, как карета Золушки, в 03:14:07 UTC 19 января 2038 года.

Вы можете проверить новый класс php DateTime или перейти на 64-битную реализацию php.

Кроме того, прочитайте это. Доступ к датам в PHP после 2038 года

(Спасибо за обнаружение этой проблемы с предварительным уведомлением за 22 года. Другие не будут.)

Другие вопросы по тегам