PHP - Хранение метки времени Unix в MySQL (избегая переполнения time_t)
Я только что понял проблему 2038 года, когда время Unix будет сброшено до отрицательного минимального диапазона, поэтому я решил немного изучить эту интересную тему.
Сейчас я проектирую структуру базы данных (в mysql) и думаю, что эти два соображения могут решить проблему:
1) - Хранение данных времени НЕ в поле метки времени, а в столбце bigint (или больше).
2) - Сервер, который я буду использовать для своего приложения, использует 64-битную ОС, поэтому, если я использую функцию даты php, она вернет дату правильно.
Исходя из этих соображений, я собираюсь принять метку времени, что вы об этом думаете? Спасибо..
1 ответ
MySQL DATETIME
столбцы имеют диапазон вплоть до 9999-12-31 23:59:59
так что я бы предложил использовать те, а не TIMESTAMP
, если вы беспокоитесь о проблеме Y2K38.
Единственное преимущество TIMESTAMP
имеет более DATETIME
Это автоматическое преобразование часовых поясов, но мы все равно храним все время как UTC, поэтому для нас это не проблема.
Если вы действительно хотите использовать временные метки, то я почти уверен, что до 2038 года будут предприняты согласованные усилия по обновлению систем MySQL и C до time_t
это имеет гораздо больший диапазон. Поскольку это отдельный тип в C, его будет довольно легко обновить.
И, в отличие от плоских файлов в C, перенос данных базы данных будет намного проще, поскольку метаданные столбцов (например, какие столбцы содержат метки времени) легко доступны.