Я создаю базу данных для записей, которые расширяются до 1000 года нашей эры, но поля MySQL Date и DateTime поддерживают только даты, начинающиеся с 1000.
Есть ли способ, который был бы более удобен, чем использование типа bigint для подсчета секунд до / после 01.01.1970 с использованием метки времени Unix, или переключение на программное обеспечение базы данных, которое поддерживает большие диапазоны дат?
mysql
database-design
best-practices
timestamp
date-format
Дэвид Лебауэр
источник
источник
Ответы:
Альтернативой является сохранение каждой части даты в числовом поле. Таким образом, у вас будет три поля:
Таким образом, он все еще будет читаемым человеком. Диапазон значений для различных числовых типов данных в MySQL доступен в разделе Обзор числовых типов . Требования к хранению доступны в разделе Требования к типу данных .
источник
Для приложений, которым требуются очень старые (и для некоторых, даже в отдаленном будущем) даты, никакой тип данных даты в СУБД не подходит.
Если бы я был вами, я бы использовал строковый тип для собственного хранилища и придерживался бы значимого формата, такого как: + YYYY-MM-DD, чтобы приспособить BC / AD и любую прогнозируемую историческую или разумную будущую дату.
Если это может помочь, вы можете создать класс библиотеки, который преобразует ваш внутренний формат хранения в более презентабельный для уровня пользовательского интерфейса. Вы можете даже включить библиотечные функции, которые конвертируют в собственный тип даты, если ваш язык поддерживает даты, которые вы будете иметь в своей базе данных.
источник
CHECK
ограничение для принудительного применения формата строки даты. Увы, MySQL не применяетCHECK
ограничения.BIT
или,BOOLEAN
чтобы указать полярность даты. :) Конечно, если вы сделаете это, вы будете самостоятельно, если будете выполнять расчеты в эти даты "BC". Кто знает, какие настройки календаря, которые обычно выполняются для нас библиотечными функциями, будут пропущены при манипулировании «поддельными» датами до нашей эры ...Как насчет наличия одного поля с плавающей точкой в таблице, где мы храним даты в числовом формате, например, 2015-10-12 10:12:05 будут храниться 20151012. 101205. Всегда лучше иметь сортировку по одному полю, а не 3 или более разные поля.
Выше логика не работает для нескольких сценариев. Итак, мы конвертировали дату в секунды, считая 1 день = 86400 секунд. Используется отрицательно для дат BC. Работает как положено.
источник