Mysql
 sql >> Base de données >  >> RDS >> Mysql

SYSDATE() vs NOW() dans MySQL :Quelle est la différence ?

Lors du retour de la date/heure actuelle dans MySQL, vous pouvez choisir parmi une gamme de fonctions. La plupart d'entre eux sont simplement des synonymes d'une autre fonction.

Cependant, il existe deux fonctions qui semblent faire la même chose, mais qui sont en réalité légèrement différentes. Les fonctions auxquelles je fais référence sont SYSDATE() et NOW() .

La différence entre SYSDATE() et NOW()

Les deux fonctions renvoient la date et l'heure actuelles. Cependant, voici où ils diffèrent :

  • SYSDATE() renvoie l'heure à laquelle il s'exécute.
  • NOW() renvoie une heure constante qui indique l'heure à laquelle l'instruction a commencé à s'exécuter.
  • Le SET TIMESTAMP l'instruction affecte la valeur renvoyée par NOW() mais pas par SYSDATE() .

Ainsi, dans de nombreux cas, vous obtiendrez probablement le même résultat quelle que soit la fonction que vous utilisez. Cependant, si votre instruction est plus complexe et prend du temps à s'exécuter, vous pourriez vous retrouver avec une assez grande différence dans la valeur de retour selon la fonction que vous utilisez.

Exemple

Voici un exemple pour montrer comment la valeur de retour peut varier, selon la fonction que vous utilisez.

SELECT
    SYSDATE(), SLEEP(10) AS '', SYSDATE(),
    NOW(), SLEEP(10) AS '', NOW();

Résultat :

+---------------------+---+---------------------+---------------------+---+---------------------+
| 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 |
+---------------------+---+---------------------+---------------------+---+---------------------+

Donc, dans cet exemple, j'exécute SYSDATE() deux fois, mais avec une pause de 10 secondes entre les deux. Je fais ensuite la même chose avec NOW() .

Comme prévu, la pause de 10 secondes affecte la valeur de retour du second SYSDATE() mais pas le second NOW() . En fait, les valeurs des deux instances de NOW() sont les mêmes que pour la première instance de SYSDATE() , c'est-à-dire lorsque l'instruction a commencé à s'exécuter.

Faire de SYSDATE() un alias pour NOW()

Si la différence entre ces deux fonctions vous pose problème, vous avez en fait la possibilité de faire SYSDATE() un alias pour NOW() .

Pour ce faire, utilisez le --sysdate-is-now option de commande du serveur. Pour plus d'informations, consultez –sysdate-is-now sur le site Web de documentation MySQL.