Estoy creando una base de datos para registros que se extienden antes de 1000 AD, pero los campos MySQL Date y DateTime solo admiten fechas que comienzan en 1000.
¿Hay alguna manera que sería más conveniente que usar un tipo bigint para contar segundos antes / después del 1/1/1970 usando una marca de tiempo Unix, o cambiar a un software de base de datos que admita rangos de fechas más grandes?
mysql
database-design
best-practices
timestamp
date-format
David LeBauer
fuente
fuente
Respuestas:
Una alternativa es almacenar cada parte de la fecha en un campo numérico. Entonces tendrías tres campos:
De esta manera, aún sería legible para los humanos. El rango de valores para diferentes tipos de datos numéricos en MySQL está disponible en Descripción general de tipos numéricos . Los requisitos de almacenamiento están disponibles en Requisitos de almacenamiento de tipo de datos .
fuente
Ningún tipo de datos de fecha RDBMS nativo servirá para aplicaciones que requieren fechas muy antiguas (y para algunas, incluso futuras).
Si yo fuera usted, usaría un tipo de cadena para el almacenamiento nativo y me quedaría con un formato de lugar significativo como: + AAAA-MM-DD para acomodar BC / AD y cualquier fecha histórica histórica o razonable previsible.
Si puede ayudar, puede crear una clase de biblioteca que convierta su formato de almacenamiento interno en uno más presentable para la capa de interfaz de usuario. Incluso puede incluir funciones de biblioteca que se conviertan a un tipo de fecha nativo, si su idioma de elección admite las fechas que tendrá en su base de datos.
fuente
CHECK
restricción para aplicar un formato de cadena de fecha. Por desgracia, MySQL no imponeCHECK
restricciones.BIT
oBOOLEAN
para indicar la polaridad de la fecha. :) Por supuesto, si haces eso, estás solo si haces cálculos en esas fechas "BC". Quién sabe qué tipo de ajustes de calendario que normalmente se ocupan de las funciones de la biblioteca se perderían al manipular las fechas "falsas" de BC ...¿Qué tal si tenemos un único campo flotante en la tabla donde almacenamos fechas en formato numérico para, por ejemplo, 2015-10-12 10:12:05 se almacenará 20151012. 101205. Siempre es mejor ordenar en un solo campo en lugar de tener 3 o más Diferentes campos.
La lógica anterior no funciona para algunos escenarios. Por lo tanto, hemos convertido la fecha en segundos considerando 1 día = 86400 segundos. Usado negativo para las fechas de BC. Funciona como se esperaba.
fuente