Bei der Rückgabe des aktuellen Datums/der aktuellen Uhrzeit in MySQL gibt es eine Reihe von Funktionen, aus denen Sie wählen können. Die meisten davon sind einfach Synonyme für eine andere Funktion.
Es gibt jedoch zwei Funktionen, die scheinbar dasselbe tun, sich aber tatsächlich etwas unterscheiden. Die Funktionen, auf die ich mich beziehe, sind SYSDATE()
und NOW()
.
Der Unterschied zwischen SYSDATE() und NOW()
Beide Funktionen geben das aktuelle Datum und die Uhrzeit zurück. Hier unterscheiden sie sich jedoch:
SYSDATE()
gibt die Zeit zurück, zu der es ausgeführt wird.NOW()
gibt eine konstante Zeit zurück, die den Zeitpunkt angibt, zu dem die Anweisung begann auszuführen.- Der
SET TIMESTAMP
-Anweisung wirkt sich auf den vonNOW()
zurückgegebenen Wert aus aber nicht vonSYSDATE()
.
In vielen Fällen erhalten Sie also wahrscheinlich das gleiche Ergebnis, unabhängig davon, welche Funktion Sie verwenden. Wenn Ihre Anweisung jedoch komplexer ist und eine Weile zur Ausführung braucht, könnten Sie je nach verwendeter Funktion mit einem ziemlich großen Unterschied im Rückgabewert enden.
Beispiel
Hier ist ein Beispiel, um zu demonstrieren, wie der Rückgabewert variieren kann, je nachdem, welche Funktion Sie verwenden.
SELECT SYSDATE(), SLEEP(10) AS '', SYSDATE(), NOW(), SLEEP(10) AS '', NOW();
Ergebnis:
+---------------------+---+---------------------+---------------------+---+---------------------+ | SYSDATE() | | SYSDATE() | NOW() | | NOW() | +---------------------+---+---------------------+---------------------+---+---------------------+ | 2018-06-23 11:55:26 | 0 | 2018-06-23 11:55:36 | 2018-06-23 11:55:26 | 0 | 2018-06-23 11:55:26 | +---------------------+---+---------------------+---------------------+---+---------------------+
In diesem Beispiel führe ich also SYSDATE()
aus zweimal, aber mit einer Pause von 10 Sekunden dazwischen. Das Gleiche mache ich dann mit NOW()
.
Wie erwartet wirkt sich die Pause von 10 Sekunden auf den Rückgabewert des zweiten SYSDATE()
aus aber nicht das zweite NOW()
. Tatsächlich die Werte für beide Instanzen von NOW()
sind dieselben wie für die erste Instanz von SYSDATE()
, das ist der Zeitpunkt, an dem die Anweisung ausgeführt wurde.
SYSDATE() zu einem Alias für NOW() machen
Wenn Ihnen der Unterschied zwischen diesen beiden Funktionen Probleme bereitet, haben Sie tatsächlich die Möglichkeit, SYSDATE()
zu machen ein Alias für NOW()
.
Verwenden Sie dazu den --sysdate-is-now
Server-Befehlsoption. Weitere Informationen finden Sie unter –sysdate-is-now auf der MySQL-Dokumentationswebsite.