Le serveur MySQL
lui même n'a aucun
problème de compatibilité avec l'an 2000
(Y2K
) :
Le serveur MySQL
utilise les fonctions de
date Unix, et n'a aucun problème avec les dates jusqu'en
2069
; toutes les années écrites en deux
chiffres sont supposées faire partie de l'intervalle allant
de 1970
à 2069
, ce
qui signifie que si vous stockez la date
01
dans une colonne de type
year
, le serveur MySQL
la traitera comme 2001
.
Toutes les fonctions de dates de MySQL sont stockées dans
un fichier sql/time.cc
, et sont codées
très soigneusement pour être compatibles avec l'an 2000.
En MySQL version 3.22 et plus récent, le type de colonne
YEAR
peut stocker les valeurs
0
et de 1901
à
2155
sur un seul octet, tout en affichant
2 ou 4 chiffres.
Vous pouvez rencontrer des problèmes avec les applications qui
utilisent le serveur MySQL
sans être
compatible avec l'an 2000. Par exemple, les vieilles
applications utilisent des valeurs d'années sur deux chiffres
(ce qui est ambigu), plutôt qu'avec 4 chiffres. Ce problème
peut être complété par des applications qui utilisent des
valeurs telles que 00
ou
99
comme indicateur de données
``manquante''.
Malheureusement, ces problèmes peuvent se révéler difficiles à corriger car différentes applications peuvent être écrites par différents programmeurs, et chacun utilise un jeu différent de conventions et de fonctions de gestion des dates.
Voici une illustration simple qui montre que le serveur
MySQL
n'a aucun problème avec les dates jusqu'en
2030 :
mysql>DROP TABLE IF EXISTS y2k;
Query OK, 0 rows affected (0.01 sec) mysql>CREATE TABLE y2k (date DATE,
->date_time DATETIME,
->time_stamp TIMESTAMP);
Query OK, 0 rows affected (0.00 sec) mysql>INSERT INTO y2k VALUES
->("1998-12-31","1998-12-31 23:59:59",19981231235959),
->("1999-01-01","1999-01-01 00:00:00",19990101000000),
->("1999-09-09","1999-09-09 23:59:59",19990909235959),
->("2000-01-01","2000-01-01 00:00:00",20000101000000),
->("2000-02-28","2000-02-28 00:00:00",20000228000000),
->("2000-02-29","2000-02-29 00:00:00",20000229000000),
->("2000-03-01","2000-03-01 00:00:00",20000301000000),
->("2000-12-31","2000-12-31 23:59:59",20001231235959),
->("2001-01-01","2001-01-01 00:00:00",20010101000000),
->("2004-12-31","2004-12-31 23:59:59",20041231235959),
->("2005-01-01","2005-01-01 00:00:00",20050101000000),
->("2030-01-01","2030-01-01 00:00:00",20300101000000),
->("2050-01-01","2050-01-01 00:00:00",20500101000000);
Query OK, 13 rows affected (0.01 sec) Records: 13 Duplicates: 0 Warnings: 0 mysql>SELECT * FROM y2k;
+------------+---------------------+----------------+ | date | date_time | time_stamp | +------------+---------------------+----------------+ | 1998-12-31 | 1998-12-31 23:59:59 | 19981231235959 | | 1999-01-01 | 1999-01-01 00:00:00 | 19990101000000 | | 1999-09-09 | 1999-09-09 23:59:59 | 19990909235959 | | 2000-01-01 | 2000-01-01 00:00:00 | 20000101000000 | | 2000-02-28 | 2000-02-28 00:00:00 | 20000228000000 | | 2000-02-29 | 2000-02-29 00:00:00 | 20000229000000 | | 2000-03-01 | 2000-03-01 00:00:00 | 20000301000000 | | 2000-12-31 | 2000-12-31 23:59:59 | 20001231235959 | | 2001-01-01 | 2001-01-01 00:00:00 | 20010101000000 | | 2004-12-31 | 2004-12-31 23:59:59 | 20041231235959 | | 2005-01-01 | 2005-01-01 00:00:00 | 20050101000000 | | 2030-01-01 | 2030-01-01 00:00:00 | 20300101000000 | | 2050-01-01 | 2050-01-01 00:00:00 | 00000000000000 | +------------+---------------------+----------------+ 13 rows in set (0.00 sec)
Cet exemple montre que les types DATE
et
DATETIME
ne poseront aucun problème avec les
dates futures (ils gèrent les dates jusqu'en 9999).
Le type TIMESTAMP
, qui est utilisé pour
stocker la date courante, est valide jusqu'en
2030-01-01
. TIMESTAMP
va
de 1970
en 2030
sur les
machines 32 bits (valeur signée). Sur les machines 64 bits, il
gère les dates jusqu'en 2106
(valeur non
signée).
Même si le serveur MySQL
est compatible an
2000, il est de votre responsabilité de fournir des données
non ambiguës. Voyez Section 11.3.4, « An 2000 et les types date » pour les
règles du serveur MySQL
pour traiter les
dates ambiguës (les données contenant des années exprimées
sur deux chiffres).
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.