Quelle est la différence entre DATETIME et TIMESTAMP dans MySQL?

Pensez-vous qu’il serait préférable d’utiliser un champ de type datetime ou timestamp, et pourquoi (en utilisant MySQL) ?

Je travaille avec PHP en backend.

Timestamps dans MySQL sont généralement utilisés pour suivre les modifications apportées aux enregistrements, et sont souvent mis à jour chaque fois que l’enregistrement est modifié. Si vous souhaitez stocker une valeur spécifique, vous devez utiliser un champ DateTime.

Si vous devez choisir entre l’utilisation d’un Timestamps UNIX ou d’un champ DateTime natif de MySQL, optez pour le format natif. Vous pouvez effectuer des calculs dans MySQL et il est simple de changer le format de la valeur en un Timestamps UNIX lorsque vous interrogez l’enregistrement si vous voulez l’exploiter avec PHP.

1 « J'aime »

J’utilise toujours les champs DATETIME pour tout ce qui n’est pas des métadonnées (date de création ou de modification).

Comme mentionné dans la documentation MySQL :

Le type DATETIME est utilisé lorsque vous avez besoin de valeurs qui contiennent à la fois des informations de date et d’heure. MySQL récupère et affiche les valeurs DATETIME au format ‹ YYYY-MM-DD HH:MM:SS ›. La plage prise en charge va de ‹ 1000-01-01 00:00:00 › à ‹ 9999-12-31 23:59:59 ›.

Le type de données TIMESTAMP est compris entre ‹ 1970-01-01 00:00:01 › UTC et ‹ 2038-01-09 03:14:07 › UTC. Ses propriétés varient en fonction de la version de MySQL et du mode SQL utilisé par le serveur.

Voir ici Les types de données MySQL - WayToLearnX le format utiliser dans DATETIME et TIMESTAMP.

1 « J'aime »
  • TIMESTAMP est de quatre octets contre huit octets pour DATETIME.
  • Les TIMESTAMP sont également plus légers pour la base de données et indexés plus rapidement.
  • Le type DATETIME est utilisé lorsque vous avez besoin de valeurs qui contiennent à la fois des informations de date et d’heure. MySQL récupère et affiche les valeurs DATETIME au format YYYY-MM-DD HH:MM:SS. La plage prise en charge est de 1000-01-01 00:00:00 à 9999-12-31 23:59:59. Le type de données TIMESTAMP a une plage allant de 1970-01-01 00:00:01 UTC à 2038-01-09 03:14:07 UTC. Ses propriétés varient en fonction de la version de MySQL et du mode SQL utilisé par le serveur.
  • DATETIME est constant alors que TIMESTAMP est affecté par le paramètre time_zone.
1 « J'aime »

La différence clé est que DATETIME est constant alors que TIMESTAMP est affecté par le paramètre time_zone.

L’exemple ci-dessous montrent comment le type TIMESTAMP a modifié les valeurs après avoir changé le fuseau horaire en ‹ Europe/Helsinki › où DATETIME est resté inchangé.

mysql> show variables like '%time_zone%';
+------------------+---------------------+
| Variable_name    | Value               |
+------------------+---------------------+
| system_time_zone | India Standard Time |
| time_zone        | Asia/Dhaka       |
+------------------+---------------------+

mysql> create table testdate(
    -> coldatetime datetime,
    -> coltimestamp timestamp
    -> );

mysql> insert into testdate values ((now()),(now()));

mysql> select * from testdate;
+---------------------+---------------------+
| coldatetime          | coltimestamp         |
+---------------------+---------------------+
| 2022-01-21 12:25:02 | 2022-01-21 14:35:03 |
+---------------------+---------------------+

mysql> set time_zone="Europe/Helsinki";

mysql> select * from testdate;
+---------------------+---------------------+
| coldatetime          | coltimestamp         |
+---------------------+---------------------+
| 2022-01-21 12:25:02 | 2022-01-21 07:42:05 |
+---------------------+---------------------+
1 « J'aime »

TIMESTAMP est de 4 octets contre 8 pour DATETIME.

1 « J'aime »