Insérer la valeur NULL dans le timestamp MySQL
Je suis en observant un comportement inattendu avec insertion/mise à jour de la valeur NULL dans une colonne timestamp MySQL.
Considérons les énoncés suivants.
create table temp(id int, hireDate timestamp default 0);
insert into temp (id) values(1);
insert into temp (id, hireDate) values(2, null);
select * from temp;
id hireDate
-----------------------------
1
2 2012-09-19 10:54:10.0
Le premier insert (quand hiredate
n'est pas spécifié dans le SQL, date d'embauche est null(0)
qui est attendu.
Toutefois, lorsqu'une valeur null explicite passé dans le langage SQL, la date actuelle heure est inséré qui est inattendu. Pourquoi est-ce arrivé?
Remarque: Hibernate utilise le deuxième type d'insertion et d'où il ne devienne un problème. Comment puis-je insérer la valeur null dans une colonne timestamp?
- Qu'est-ce que Hibernate? C'est le comportement par défaut de MySQL. Chaque fois que Vous mettez à jour la ligne aussi des champs d'horodatage mise à jour automatiquement
- et la valeur NULL est différent de 0
- par défaut 0 est la clé. sans cela, il sera toujours NULL, au lieu de CURRENT_TIMESTAMP
Vous devez vous connecter pour publier un commentaire.
http://dev.mysql.com/doc/refman/5.0/en/timestamp-initialization.html
Vous pouvez insérer et mettre à jour une valeur NULL dans un timestamp MySQL.
Créer la table:
Insérer quelques lignes:
Qui imprime:
La colonne appelée
the_time
avec le type de données:timestamp
dans la 2e rangée a la valeur NULL.Vous avez besoin de changer la valeur par défaut pour la colonne date d'embauche. La valeur par défaut doit être null
Ce
Devrait être ceci:
hireDate timestamp default null
est une erreur de syntaxe.hireDate timestamp null
œuvres.Ne jamais stocker n'importe quelle application-valeur dans une base de données MySQL d'horodatage type de colonne.
Utiliser l'horodatage-uniquement pour le type de base de données-serveur-côté dynamique de l'horodatage (voir la valeur par DÉFAUT et SUR la mise à JOUR des attributs de colonne).
Rendre explicite, en appelant les colonnes "mysql_row_created_at" et "mysql_row_updated_at'.
Être conscient que MySQL stocke physiquement son timestamp-type numérique UNIX-époque-delta, donc il y a un implicite fuseau horaire UTC, ce qui le rend immunisé contre des changements de fuseau horaire sur la session (AKA connexion) niveau.
Rester loin de la 'datetime' type, encore plus quand le stockage de n'importe quelle valeur qui a connu le fuseau horaire. Le 'datetime' type est un peu comme une chaîne de paniers numéros. Il n'y a pas de fuseau horaire données stockées que.
La "date" de type est généralement bon à utiliser. Sachez cependant que, dans certains contextes, il sera intepreted comme une date à minuit (de l'actif fuseau horaire), ce qui aura pour tous 'datetime' liées confusions que vous devriez éviter.
Pour toute application côté de la date-l'heure-les valeurs, utiliser un "unsigned int", un "bigint" (signée), un "double" (signé) ou une virgule(N,P), simplement pour stocker UNIX-époque-les deltas.
Assurez-vous de montrer la résolution dans une colonne de suffixe de nom, si ce n'est pas secondes.
Exemples:
Traiter votre base de données autant que stupide de stockage possible. Afin de faire toutes les conversions que sur l'application côté, jamais sur la base de données côté.
Bon à savoir:
si vous souhaitez insérer la valeur NULL dans la
hireDate
coloumn de votre table, alors vous devez fournir nullINSERT INTO temp (id, hireDate) VALUES(3, null);
Parce que
Datatype
dehireDate
esttimestamp
et il devrait être défini comme null lors de la création de la colonnenull
, mais plutôt0000-00-00 00:00:00
avec un message d'avertissement comme si toute autre valeur non valide pour un horodatage.