När du returnerar aktuellt datum/tid i MySQL finns det en rad funktioner du kan välja mellan. De flesta av dessa är helt enkelt synonymer för en annan funktion.
Det finns dock två funktioner som verkar göra samma sak, men som i själva verket är lite olika. Funktionerna jag syftar på är SYSDATE()
och NOW()
.
Skillnaden mellan SYSDATE() och NOW()
Båda funktionerna returnerar aktuellt datum och tid. Men här är de olika:
SYSDATE()
returnerar tidpunkten då den körs.NU()
returnerar en konstant tid som anger tidpunkten då påståendet började utföras.STÄLL IN TIDSTÄMPEL satsen påverkar värdet som returneras av NOW()
men inte avSYSDATE()
.
Så i många fall kommer du förmodligen att få samma resultat oavsett vilken funktion du använder. Men om ditt uttalande är mer komplext och tar ett tag att köra, kan du sluta med en ganska stor skillnad i returvärdet beroende på vilken funktion du använder.
Exempel
Här är ett exempel för att visa hur returvärdet kan variera beroende på vilken funktion du använder.
SELECT SYSDATE(), SLEEP(10) AS '', SYSDATE(), NOW(), SLEEP(10) AS '', NOW();
Resultat:
+---------------------+---+---------------------+---------------------+---+---------------------+ | 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 | +---------------------+---+---------------------+---------------------+---+---------------------+
Så i det här exemplet kör jag SYSDATE()
två gånger, men med en paus på 10 sekunder emellan. Jag gör sedan samma sak med NOW()
.
Som väntat påverkar 10 sekunders paus returvärdet för den andra SYSDATE()
men inte den andra NOW()
. Faktum är att värdena för båda instanserna av NOW()
är samma som för den första instansen av SYSDATE()
, vilket är när satsen började köras.
Gör SYSDATE() till ett alias för NOW()
Om skillnaden mellan dessa två funktioner orsakar dig problem har du faktiskt möjlighet att göra SYSDATE()
ett alias för NOW()
.
För att göra detta, använd --sysdate-is-now
serverkommandoalternativ. För mer information, se –sysdate-is-now på MySQL-dokumentationswebbplatsen.