In meiner Chat-Anwendung verwende ich System.currentTimeMillis()/1000
auf der Android-App, um die Zeit zu senden, die die Nachricht an meinem MySQL-Server erstellt wurde, ohne den Millisekunden-Teil. Jetzt ist der komische Teil, meine Tabelle hat zwei Datensätze mit dem gleichen Wert von Millisekunden. Noch seltsamer ist, dass, wenn ich die Millisekunden in lesbare Zeit umwandle, die Werte völlig verschieden sind!
Hier ist die Ausgabe von zwei verschiedenen Anfragen:MySQL TIMESTAMP verhält sich seltsam
SELECT max(UNIX_TIMESTAMP(created_at)), created_at, message FROM messages WHERE mtype = 0 AND groups_id = 1;
max(UNIX_TIMESTAMP(created_at)) | created_at | message |
+--------------------------------+---------------------+---------+
| 1464096148 | 2016-04-25 13:57:18 | The
SELECT UNIX_TIMESTAMP(created_at), created_at, MESSAGE FROM messages WHERE mtype = 0 AND groups_id = 1 ORDER BY created_at DESC LIMIT 1;
max(UNIX_TIMESTAMP(created_at)) | created_at | message |
+--------------------------------+---------------------+---------+
| 1464096148 | 2016-05-24 18:52:28 | test
Der Ausgang der letzten Abfrage ist das, was ich von meiner Client-Anwendung Speicher senden.
Ich sehe kein Problem hier sollte es anders sein, sind Sie die Auswahl der max eine in der ersten Abfrage, die wahrscheinlich zu '2016-05-24' – sagi
gehört @ Sagi bitte sehen Sie den Wert von Millisekunden in der ersten Spalte, sie sind völlig gleich. Und dann überprüfen Sie die 2. Spalte ist völlig anders. –
Warum werden sie nicht? Sie haben mehr als einen Datensatz. Wenn Sie also MAX() auswählen, wird der maximale Zeitstempel ausgewählt. Die anderen Spalten ohne Gruppenklausel und Aggregationsfunktion werden zufällig ausgewählt. – sagi