Quando si restituisce la data/ora corrente in MySQL, è possibile scegliere tra una serie di funzioni. La maggior parte di questi sono semplicemente sinonimi di un'altra funzione.
Tuttavia, ci sono due funzioni che sembrano fare la stessa cosa, ma in realtà sono leggermente diverse. Le funzioni a cui mi riferisco sono SYSDATE()
e NOW()
.
La differenza tra SYSDATE() e NOW()
Entrambe le funzioni restituiscono la data e l'ora correnti. Tuttavia, ecco dove differiscono:
SYSDATE()
restituisce l'ora in cui viene eseguito.NOW()
restituisce un tempo costante che indica l'ora in cui l'istruzione ha iniziato a essere eseguito.- Il
SET TIMESTAMP
istruzione influisce sul valore restituito daNOW()
ma non daSYSDATE()
.
Quindi, in molti casi, probabilmente otterrai lo stesso risultato indipendentemente dalla funzione che utilizzi. Tuttavia, se la tua istruzione è più complessa e richiede un po' di tempo per essere eseguita, potresti ritrovarti con una differenza abbastanza grande nel valore restituito a seconda della funzione che usi.
Esempio
Ecco un esempio per dimostrare come il valore restituito può variare, a seconda della funzione che utilizzi.
SELECT SYSDATE(), SLEEP(10) AS '', SYSDATE(), NOW(), SLEEP(10) AS '', NOW();
Risultato:
+---------------------+---+---------------------+---------------------+---+---------------------+ | 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 | +---------------------+---+---------------------+---------------------+---+---------------------+
Quindi, in questo esempio, eseguo SYSDATE()
due volte, ma con una pausa di 10 secondi nel mezzo. Quindi faccio la stessa cosa con NOW()
.
Come previsto, la pausa di 10 secondi influisce sul valore restituito del secondo SYSDATE()
ma non il secondo NOW()
. In effetti, i valori per entrambe le istanze di NOW()
sono gli stessi della prima istanza di SYSDATE()
, ovvero quando è iniziata l'esecuzione dell'istruzione.
Rendere SYSDATE() un alias per NOW()
Se la differenza tra queste due funzioni ti sta causando problemi, hai effettivamente la possibilità di creare SYSDATE()
un alias per NOW()
.
Per farlo, usa il --sysdate-is-now
opzione di comando del server. Per ulteriori informazioni, vedere –sysdate-is-now sul sito Web della documentazione di MySQL.