Je crée une base de données pour les enregistrements qui s'étendent avant 1000 AD, mais les champs MySQL Date et DateTime ne prennent en charge que les dates commençant à 1000.
Existe-t-il un moyen plus pratique que d'utiliser un type bigint 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 qui prend en charge de plus grandes plages de dates?
mysql
database-design
best-practices
timestamp
date-format
David LeBauer
la source
la source
Réponses:
Une alternative consiste à stocker chaque partie de la date dans un champ numérique. Vous auriez donc trois champs:
De cette façon, il serait toujours lisible par l'homme. La plage de valeurs pour différents types de données numériques dans MySQL est disponible dans Présentation des types numériques . Les exigences de stockage sont disponibles dans Data Type Storage Requirements .
la source
Aucun type de données de date RDBMS natif ne fera l'affaire pour les applications qui nécessitent des dates très anciennes (et pour certaines, même lointaines).
Si j'étais vous, j'utiliserais un type de chaîne pour le stockage natif et resterais avec un format significatif comme: + YYYY-MM-DD pour accueillir BC / AD et toute date future historique ou raisonnable prévisible.
Si cela peut vous aider, vous pouvez créer une classe de bibliothèque qui convertit votre format de stockage interne en un format plus présentable 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 la langue de votre choix prend en charge les dates que vous aurez dans votre base de données.
la source
CHECK
contrainte pour appliquer un format de chaîne de date. Hélas, MySQL n'applique pas deCHECK
contraintes.BIT
ouBOOLEAN
pour indiquer la polarité de la date. :) Bien sûr, si vous faites cela, vous êtes seul si vous effectuez des calculs sur ces dates "BC". Qui sait quel genre d'ajustements de calendrier qui sont normalement pris en charge pour nous par les fonctions de bibliothèque serait manqué lors de la manipulation des "fausses" dates BC ...Que diriez-vous d'avoir un seul champ flottant dans la table où nous stockons les 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 un tri sur un seul champ au lieu d'en avoir 3 ou plus différents domaines.
La logique ci-dessus ne fonctionne pas pour quelques scénarios. Ainsi, nous avons converti la date en secondes en considérant 1 jour = 86400 secondes. Utilisé négatif pour les dates BC. Cela fonctionne comme prévu.
la source