Maison  >  Article  >  base de données  >  Une explication du problème de report de temps dans MySQL

Une explication du problème de report de temps dans MySQL

王林
王林avant
2020-01-21 20:15:082734parcourir

Une explication du problème de report de temps dans MySQL

Après la mise à jour de MySQL vers 5.6.4, une nouvelle fonctionnalité appelée secondes fonctionnelles a été ajoutée, qui peut enregistrer la valeur en millisecondes du temps. Cependant, la base de données actuelle n'enregistre pas les valeurs en millisecondes, il y aura donc un problème car le temps en Java sera arrondi si les millisecondes dépassent 500.

Ce qui suit est un exemple qui montre comment le temps est transporté. Créez d'abord un tableau :

CREATE TABLE test_time (
 time_sec   datetime,
 time_millis datetime(3),
 time_micros datetime(6),
 stamp_sec  timestamp,
 stamp_millis timestamp(3),
 stamp_micros timestamp(6)
);

Certains amis ne savent peut-être pas que la date, l'heure et l'horodatage peuvent être définis avec précision. La valeur de précision est de 0 à 6, ce qui signifie le nombre de décimales conservées. Évidemment, conserver 3 bits peut être considéré comme une précision à la milliseconde, et conserver 6 bits peut être considéré comme une précision à la microseconde.

(Tutoriel vidéo d'apprentissage en ligne recommandé : Tutoriel vidéo MySQL )

Ensuite, nous insérons un enregistrement :

INSERT INTO test_time
( time_sec, time_millis, time_micros,
 stamp_sec, stamp_millis, stamp_micros )
VALUES(
 '2019-11-30 12:34:56.987654',
 '2019-11-30 12:34:56.987654',
 '2019-11-30 12:34:56.987654',
 '2019-11-30 12:34:56.987654',
 '2019-11-30 12:34:56.987654',
 '2019-11-30 12:34:56.987654'
);

Puis sélectionnons à nouveau * À partir de la requête test_time, vous pouvez voir les résultats suivants :

time_sec             |time_millis            |time_micros               |stamp_sec            |stamp_millis           |stamp_micros              |
---------------------|-----------------------|--------------------------|---------------------|-----------------------|--------------------------|
2019-11-30 12:34:57.0|2019-11-30 12:34:56.988|2019-11-30 12:34:56.987654|2019-11-30 12:34:57.0|2019-11-30 12:34:56.988|2019-11-30 12:34:56.987654|

Vous pouvez voir que les secondes valeurs de time_sec et stamp_sec dans la base de données ont été arrondies et que les valeurs en millisecondes de time_millis et stamp_millis ont été arrondi.

On peut voir qu'il existe deux méthodes pour éviter de telles erreurs :

1. Utilisez datetime(6) ou timestamp(6) lors de la définition des champs ;

2. Il n'y a pas de précision lors de la définition du champ, mais la valeur en millisecondes doit être tronquée avant de stocker l'heure dans la base de données.

Articles et tutoriels connexes recommandés : Tutoriel mysql

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer