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.
