Je crée une base de données pour des enregistrements qui s'étendent avant 1000 AD, mais MySQL Date et DateTime Champs ne prend en charge que les dates à partir de 1000.
Existe-t-il un moyen qui serait plus pratique que d'utiliser un type Bigint Type pour compter les secondes avant/après le 1/1/1970 à l'aide d'un horodatage UNIX ou de passer à un logiciel de base de données prenant en charge les gammes de date plus importantes?
Une alternative est de stocker chaque partie de la date dans un champ numérique. Donc, vous auriez trois champs:
year SMALLINT # Store positive values for AD and negative for BC years.
month TINYINT
day TINYINT
De cette façon, il serait toujours lisible par l'homme. La gamme de valeurs pour différents types de données numériques dans MySQL est disponible à vue d'ensemble des types numériques . Les exigences de stockage sont disponibles à exigences de stockage de type de données .
Aucun type de données de DATE NATIVE DATE ne va faire pour les applications nécessitant des dates très anciennes (et pour un avenir même lointain)).
Si j'étais vous, j'utiliserais un type de chaîne pour le stockage natif et collez-vous avec un format d'endroit-significatif comme: + AAAA-MM-DD pour accueillir BC/AD et toute date future historique ou raisonnable prévisible.
Si cela pourrait vous aider, vous pouvez créer une classe de bibliothèque qui convertit votre format de stockage interne en un plus présent pour la couche d'interface utilisateur. Vous pouvez même inclure des fonctions de bibliothèque qui se convertissent en un type de date natif, si votre langue de choix prend en charge les dates que vous aurez dans votre base de données.
Que diriez-vous d'avoir un seul champ de flotteur dans la table où nous stockons des dates au format numérique pour par exemple. 2015-10-12 10:12:05 sera stocké 20151012. 101205. Il est toujours préférable d'avoir le tri sur un seul champ au lieu d'avoir 3 champs différents ou plus.
Au-dessus de la logique ne fonctionne pas pour quelques scénarios. Donc, nous avons converti la date en secondes en quelques secondes = 86400 secondes. Utilisé négatif pour les dates de la Colombie-Britannique. Cela fonctionne comme prévu.