Dans ce chapitre nous allons parler des types temporels qui permettent de gérer des dates et des temps sur MySQL.
- Date, permet de sauvegarder un jour au format "YYYY-MM-DD"
- Time, permet de sauvegarder un temps "hh:mm:ss(.fraction)"
- DateTime, permet de sauvegarder un jour et un temps "YYYY-MM-DD hh:mm:ss"
- TimeStamp, permet de faire la même chose qu'un DateTime mais utilise un timestamp en interne
- Year, permet de sauvegarder une année
Timestamp et fuseau horaire
Le type Timestamp a un comportement un peu particulier par rapport aux autres types car il convertit la date reçue sur le fuseau horaire UTC lors de l'écriture, et le re-convertit dans le fuseau horaire de la base de données lors de la lecture.
Pour connaitre le fuseau horaire de votre base de données et de votre sessions vous pouvez récupérer la variable `time_zone
SELECT @@global.time_zone, @@session.time_zone;
Si vous obtenez SYSTEM
, la base de données est alors sur le fuseau horaire de votre système. Pour connaitre la valeur de décalage vous pouvez faire une simple comparaison :
SELECT timediff(now(),convert_tz(now(),@@session.time_zone,'+00:00'));
Vous pouvez aussi utiliser le timestamp pour une valeur par défaut (même pour un champs de type DateTime)
ALTER TABLE
ADD created_at DATETIME NOT NULL CURRENT_TIMESTAMP,
ADD updated_at DATETIME NOT NULL CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;
L'inconvénient est alors que la date obtenu sera nécessairement donnée dans le fuseau horaire de votre base de données donc on préfèrera souvent remplir ce types de champs depuis notre langage de programmation pour plus de contrôle.