8 votes

MySQL : La tentative d'insertion d'une valeur dans un timestamp provoque une erreur

J'ai un tableau avec cette colonne :

last_modified timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

Et il semble que je ne puisse pas insérer une ligne avec un horodatage personnalisé, j'obtiens cette erreur :

Valeur de date incorrecte : '1145868501' pour la colonne 'last_modified' à la ligne 1

J'essaie d'alimenter cette table avec des données provenant d'une autre table, cette autre table ne possède qu'un champ creation_time qui est un DATETIME. J'utilise donc UNIX_TIMESTAMP(creation_time) pour alimenter l'horodatage.

Je pense que la colonne timestamp avec "DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP" m'empêche d'insérer mes propres données, ai-je raison ? Si oui, où se trouve la documentation officielle à ce sujet, et quelle est la meilleure solution ? Créer d'abord un simple timestamp puis modifier la table après avoir inséré des données ?

Merci !

EDIT : puisque les gens me conseillent de ne pas utiliser UNIX_TIMESTAMP, je dois dire que je ne voulais pas l'utiliser au début, mais j'ai obtenu ce genre d'erreur : Valeur de date incorrecte : '2010-03-28 02:15:51' pour la colonne 'last_modified'. J'ai donc pensé que je devais insérer un "vrai" horodatage...

7voto

ypercube Points 62714

Vous pouvez explicitement insérer une valeur dans un fichier TIMESTAMP colonne. Lire : Propriétés de TIMESTAMP

La colonne TIMESTAMP, si elle existe, est automatiquement mise à jour avec l'horodatage actuel lorsque la valeur d'une autre colonne de la ligne est modifiée par rapport à sa valeur actuelle. Si toutes les autres colonnes ont leur valeur actuelle, la colonne TIMESTAMP ne change pas. La mise à jour automatique ne s'applique pas si une valeur autre que NULL est explicitement attribuée à la colonne TIMESTAMP.


Mise à jour

Hehe, l'erreur se produit parce que - eh bien il n'y avait pas de date avec '2010-03-28 02:15:51' ! C'était pendant le décalage de l'heure d'été (qui apparaît généralement un jour de mars, entre le 1er janvier et le 31 décembre). 02:00 - 03:00 o 03:00 - 04:00 .

Voir : Heure d'été l'explication.

2voto

staticsan Points 14435

Vous essayez de mettre un long entier dans un champ de date. Cela ne fonctionne pas. Supprimez l'appel à UNIX_TIMESTAMP() et cela devrait fonctionner.

L'application MySQL TIMESTAMP est presque identique à un type DATETIME il a juste une magie supplémentaire de mise à jour automatique. En ce qui concerne le SELECT et le UPDATE, il s'agit d'une méthode de mise à jour automatique. DATETIME .

0voto

Ricardo Martins Points 1249

Si la colonne est toujours mise à jour automatiquement, vous pouvez supprimer la propriété, les getters et les setters de l'entité. De cette façon, elle sera ignorée dans toutes les requêtes.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X