Heim  >  Artikel  >  Datenbank  >  Eine Erklärung des Time-Carry-Problems in MySQL

Eine Erklärung des Time-Carry-Problems in MySQL

王林
王林nach vorne
2020-01-21 20:15:082651Durchsuche

Eine Erklärung des Time-Carry-Problems in MySQL

Nachdem MySQL auf 5.6.4 aktualisiert wurde, wurde eine neue Funktion namens funktionale Sekunden hinzugefügt, die den Millisekundenwert der Zeit aufzeichnen kann. Da die aktuelle Datenbank jedoch keine Millisekundenwerte aufzeichnet, besteht das Problem, dass die Zeit in Java gerundet wird, wenn Millisekunden 500 überschreiten.

Das Folgende ist ein Beispiel, das zeigt, wie Zeit transportiert wird. Erstellen Sie zunächst eine Tabelle:

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)
);

Einige Freunde wissen möglicherweise nicht, dass Datum, Uhrzeit und Zeitstempel genau definiert werden können. Der Genauigkeitswert beträgt 0 bis 6, was bedeutet, dass die Anzahl der Dezimalstellen beibehalten wird. Offensichtlich kann die Beibehaltung von 3 Bits als Millisekundengenauigkeit angesehen werden, und die Beibehaltung von 6 Bits kann als Mikrosekundengenauigkeit angesehen werden.

(empfohlenes Online-Lernvideo-Tutorial: MySQL-Video-Tutorial )

Dann fügen wir einen Datensatz ein:

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'
);

Dann wählen Sie erneut * Aus der test_time-Abfrage können Sie die folgenden Ergebnisse sehen:

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|

Sie können sehen, dass die Sekundenwerte von time_sec und stamp_sec in der Datenbank gerundet wurden und die Millisekundenwerte von time_millis und stamp_millis gerundet wurden gerundet.

Es ist ersichtlich, dass es zwei Methoden gibt, um solche Fehler zu vermeiden:

1. Verwenden Sie datetime(6) oder timestamp(6), wenn Sie Felder definieren;

2. Bei der Definition des Feldes gibt es keine Genauigkeit, aber der Millisekundenwert muss gekürzt werden, bevor die Zeit in der Datenbank gespeichert wird.

Empfohlene verwandte Artikel und Tutorials: MySQL-Tutorial

Das obige ist der detaillierte Inhalt vonEine Erklärung des Time-Carry-Problems in MySQL. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:jb51.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen