Das Hauptmissverständnis in MySQL mit Zeitstempeln besteht darin, dass MySQL standardmäßig Zeitstempel ohne Bruchteil zurückgibt und speichert .
SELECT current_timestamp() => 2018-01-18 12:05:34
die in Sekunden Zeitstempel als konvertiert werden kann
SELECT UNIX_TIMESTAMP(current_timestamp()) => 1516272429
So fügen Sie einen Bruchteil hinzu:
SELECT current_timestamp(3) => 2018-01-18 12:05:58.983
die in Mikrosekunden Zeitstempel als konvertiert werden kann
SELECT CAST( 1000*UNIX_TIMESTAMP(current_timestamp(3)) AS UNSIGNED INTEGER) ts => 1516272274786
Es gibt nur wenige Tricks beim Speichern in Tabellen. Wenn Ihre Tabelle wie erstellt wurde
CREATE TABLE `ts_test_table` (
`id` int(1) NOT NULL,
`not_fractional_timestamp` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
als MySQL wird NICHT Bruchteil darin speichern:
id, not_fractional_timestamp
1, 2018-01-18 11:35:12
Wenn Sie Ihrer Tabelle einen Bruchteil hinzufügen möchten, müssen Sie Ihre Tabelle auf andere Weise erstellen:
CREATE TABLE `ts_test_table2` (
`id` int(1) NOT NULL,
`some_data` varchar(10) COLLATE utf8mb4_unicode_ci NOT NULL,
`fractional_timestamp` timestamp(3) NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
das führt zum gewünschten Ergebnis:
id, some_data, fractional_timestamp
1, 8, 2018-01-18 11:45:40.811
Die Funktion current_timestamp () darf Werte bis zu 6 empfangen, aber ich habe herausgefunden (zumindest in meiner unter Windows installierten MySQL 5.7.11-Version), dass die Bruchgenauigkeit 6 zu demselben konstanten Wert von 3 Stellen am Ende führt. in meinem Fall 688
id, some_data, fractional_timestamp
1, 2, 2018-01-18 12:01:54.167688
2, 4, 2018-01-18 12:01:58.893688
Das bedeutet, dass die wirklich nutzbare Zeitstempelgenauigkeit von MySQL plattformabhängig ist:
- unter Windows: 3
- unter Linux: 6