Fixer le fuseau de session
Les fonctions de conversion MySQL dépendent du fuseau de session. Dans cet exemple, la session est réglée sur UTC.
SET time_zone = '+00:00';
SELECT FROM_UNIXTIME(1711972800);
-- 2024-04-01 12:00:00
SELECT UNIX_TIMESTAMP('2024-04-01 12:00:00');
-- 1711972800TIMESTAMP ou DATETIME ?
MySQL convertit les valeurs TIMESTAMP entre le fuseau de session et UTC lors du stockage et de la lecture. DATETIME conserve des champs calendaires sans cette conversion automatique. Aucun des deux ne mémorise à lui seul un nom de fuseau comme Europe/Paris.
CREATE TABLE events (
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
occurred_at TIMESTAMP(6) NOT NULL
);
INSERT INTO events (occurred_at)
VALUES ('2024-04-01 12:00:00.123456');Vérifier la plage et la précision
Dans MySQL 8.4, TIMESTAMP reste limité à une plage allant de 1970 à janvier 2038. DATETIME a une plage différente. Vérifiez la documentation de votre version avant de choisir un type pour des dates de naissance ou des échéances lointaines.
Les fractions doivent être prévues dans la définition de la colonne, par exemple TIMESTAMP(6). Les conversions locales autour du changement d’heure peuvent être ambiguës ; échangez des instants en UTC lorsque c’est possible.