Ao retornar a data/hora atual no MySQL, há uma variedade de funções que você pode escolher. A maioria destes são simplesmente sinônimos para outra função.
No entanto, existem duas funções que parecem fazer a mesma coisa, mas na verdade são um pouco diferentes. As funções a que me refiro são
SYSDATE()
e NOW()
. A diferença entre SYSDATE() e NOW()
Ambas as funções retornam a data e hora atuais. No entanto, aqui é onde eles diferem:
SYSDATE()
retorna a hora em que é executado.NOW()
retorna uma hora constante que indica a hora em que a instrução começou a ser executado.- O
SET TIMESTAMP
declaração afeta o valor retornado porNOW()
mas não porSYSDATE()
.
Portanto, em muitos casos, você provavelmente obterá o mesmo resultado, independentemente de qual função usar. No entanto, se sua instrução for mais complexa e demorar um pouco para ser executada, você poderá acabar com uma grande diferença no valor de retorno, dependendo de qual função você usa.
Exemplo
Aqui está um exemplo para demonstrar como o valor de retorno pode variar, dependendo de qual função você usa.
SELECT SYSDATE(), SLEEP(10) AS '', SYSDATE(), NOW(), SLEEP(10) AS '', NOW();
Resultado:
+---------------------+---+---------------------+---------------------+---+---------------------+ | 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 | +---------------------+---+---------------------+---------------------+---+---------------------+
Então, neste exemplo, eu executo
SYSDATE()
duas vezes, mas com uma pausa de 10 segundos no meio. Eu então faço a mesma coisa com NOW()
. Como esperado, a pausa de 10 segundos afeta o valor de retorno do segundo
SYSDATE()
mas não o segundo NOW()
. Na verdade, os valores das duas instâncias de NOW()
são os mesmos da primeira instância de SYSDATE()
, que é quando a instrução começou a ser executada. Tornando SYSDATE() um Alias para NOW()
Se a diferença entre essas duas funções está causando problemas, você tem a opção de fazer
SYSDATE()
um alias para NOW()
. Para fazer isso, use o comando
--sysdate-is-now
opção de comando do servidor. Para obter mais informações, consulte –sysdate-is-now no site de documentação do MySQL.