:: DEVELOPER ZONE
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 12.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).
© 1995-2005 MySQL AB. All rights reserved.
