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

Я пытаюсь сохранить в MySQL Дата() выставить последовательную дату года 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
.

2

Другие решения

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

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

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

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

2

По вопросам рекламы [email protected]