2010-12-08 5 views
5

Je stocke des enregistrements dans une base de données. Un enregistrement a un champ 'last visited' qui est un horodatage. Si un enregistrement n'a pas encore été visité, l'horodatage n'est pas valide. Je stocke actuellement une date future, par exemple '2101-01-01 00:00:00' dans le champ 'last visited', pour indiquer une date invalide.Enregistrement d'une date 'invalide' dans une base de données

Existe-t-il un meilleur moyen d'indiquer une date 'invalide'. Quelle est la «meilleure pratique» recommandée pour ce faire?

J'utilise MySQL, mais idéalement, la recommandation devrait être agnostique db

Répondre

6

Stockez une valeur NULL à la place. Les timestamps MySQL sont assez mal vissés, donc vous devrez peut-être changer votre schéma de table pour l'encourager à vous donner une valeur NULL là-dedans; J'utilise plutôt DATETIME, c'est un peu moins bizarre que TIMESTAMPs dans MySQL.

+0

Est-ce qu'un MySQL DATETIME acceptera une valeur NULL? – skyeagle

+0

Si configuré pour le faire, mais pas par défaut. Vous pouvez le changer avec quelque chose comme 'alter table mytable changer la colonne mydatetimefield mydatetimefield datetime null;', en remplaçant mytable et mydatetimefield selon les noms de tables et de champs. –

1

Je voudrais juste laisser le nul sur le terrain.

S'ils n'ont jamais visité l'enregistrement, ils ne devraient pas avoir d'horodatage du tout.

3

La méthode appropriée pour stocker quelque chose sans valeur est simplement de ne fournir aucune valeur. C'est-à-dire, un null. Stocker n'importe quoi d'autre et le traiter comme une valeur magique est souvent problématique. Il y a des moments où la valeur magique peut être une valeur valide, et maintenant vous n'avez aucune méthode pour les distinguer.

0

Y at-il une raison pour laquelle vous n'utilisez pas NULL pour cela?

Questions connexes