7.2.6.1 Bug de l'an 2000 et données de types date

Les types DATETIME, DATE et TIMESTAMP sont proches. Cette section décrit leur caractéristiques, et montre en quoi ils sont similaires, et en quoi ils sont différents.

Le type DATETIME est utile pour manipuler en même temps une date et une heure. . MySQL retourne et affiche les valeurs de type DATETIME au format 'YYYY-MM-DD HH:@:MM:SS'. L'intervalle valide pour le type DATETIME est '1000-01-01 00:00:00' à '9999-12-31 23:59:59'. (``valide`` signifie que des valeurs anciennes pourrait fonctionner, mais qu'il n'y a aucune garantie).

Le type DATE est utilisé pour manipuler simplement une date, sans l'heure. MySQL retourne et affiche les valeurs de type DATE au format 'YYYY-MM-DD' L'intervalle valide pour le type DATE est '1000-01-01' à '9999-12-31'

Le type TIMESTAMP est utilisé automatiquement lors de requête , avec la valeur courante de date et d'heure. Si il y a plusieurs colonnes de type TIMESTAMP , seule la première sera automatiquement mise à jour.

La datation automatique intervient sur la première colonne de type TIMESTAMP , et dans les conditions suivantes :@:

Dans le cas où il y a plusieurs colonnes de type TIMESTAMP, il est possible d'affecter la valeur courante de date et d'heure, en affectant la valeur NULL ou NOW().

Il est possible d'affecter n'importe quelle date à une colonne de type TIMESTAMP, en lui affectant explicitement la valeur désirée. Cela est vrai pour toutes les colonnes de type TIMESTAMP, y compris la première. Par exemple, il est possible d'utiliser une colonne de type pour enregistrer le moment de création de la ligne, mais qui ne sera plus changé par la suite.:@:

Ou alors, il est aussi simple d'utiliser une colonne de type DATETIME, qui sera initialisé à l'aide de la commande NOW() , et qui ne sera plus jamais modifiée.

TIMESTAMP couvre un espace de temps qui commence en 1970 et se termine quelques par en 2037, avec un précision d'une seconde. Ses valeurs sont affichée comme des nombres.

Le format utilisé par pour retourner les valeurs de type dépendent de la taille de l'affichage, comme présenté ci dessous. Un complet affiche 14 chiffres, mais il est possible de n'afficher qu'une partie.

Column type Display format
TIMESTAMP(14) YYYYMMDDHHMMSS
TIMESTAMP(12) YYMMDDHHMMSS
TIMESTAMP(10) YYMMDDHHMM
TIMESTAMP(8) YYYYMMDD
TIMESTAMP(6) YYMMDD
TIMESTAMP(4) YYMM
TIMESTAMP(2) YY

Toutes les colonnes de type ont besoin de la même quantité de mémoire, quelque soit le format d'affichage. Les formats d'affichage les plus courants sont le 6, le 8, le 12 et le 14. Il est possible d'imposer une taille arbitraire au format d'affichage au moment de la création de la table, mais 0 et toutes les valeurs supérieures à 14 seront ramenées à 14. Les valeurs impaires entre 1 et 13 sont arrondies au nombre entier pair supérieur.

Il est possible d'affecter des valeurs de type DATETIME, DATE et TIMESTAMP en utilisant n'importe lequel des formats suivants :@:

Toutes les valeurs de type DATETIME, DATE ou TIMESTAMP sont converties automatiquement en ``zero'' du même type ('0000-00-00 00:@:00:00', '0000-00-00' ou 00000000000000).

Pour les valeurs spécifiées au format chaîne avec des délimiteurs, il n'est pas nécessaire de préciser les deux chiffres pour les mois ou les jours. Par exemple, '1979-6-9' et '1979-06-09' sont identiques. De la même façon, pour les valeurs spécifiées au format chaîne avec des délimiteurs, il n'est pas nécessaire de préciser les deux chiffres pour les heures, minutes ou secondes. Ainsi, '1979-10-30 1:@:2:3' et '1979-10-30 01:02:03' sont identiques.

Les valeurs spécifiée au format nombre doivent avoir 6, 8, 12 ou 14 chiffres. Si le nombre a 8 ou 14 chiffres, MySQL utilisera respectivement le format YYYYMMDD ou YYYYMMDDHHMMSS, où l'année sera représentée par les quatre premiers chiffres. Si le nombre a 6 ou 12 chiffres, MySQL utilisera respectivement le format YYMMDD or YYMMDDHHMMSS, où l'année sera représentée par les deux premiers chiffres. Si le nombre n'a pas le bon nombre de chiffre, il sera complété avec des zéros non significatif (placés avant le premier chiffre), jusqu'à correspondre à une taille analysable.

Les valeurs non délimitées, sont interprétées en fonction de leur longueur. Si la chaîne fait 8 ou 14 caractères, l'année sera considérée comme ayant 4 chiffres. Sinon, l'année n'aura que les deux premiers chiffres. La chaîne est interprétée de gauche à droite, en lisant successivement l'année, le mois, le jour, l'heure, la minute et la seconde, dans la mesure où la chaîne est suffisamment longue. Cela implique qu'il ne faut pas utiliser de chaîne de moins de 6 caractères. Par exemple, la chaîne '9903', qui pourrait s'interpréter mars 1999, sera remplacée par la date ``zéro''. En effet, est capable de trouver l'année (99) et le mois (03) mais pas le jour (00), et donc cette valeur n'est pas valide.

Les colonnes de type TIMESTAMP enregistre les dates avec la précision maximum, quelque soit la taille d'affichage. Cela a plusieurs implications :@:

Il est possible d'affecter des valeurs de type date dans une variable d'un autre type date. Cependant, cela peut engendrer des altérations ou des pertes d'informations. :@:

Attention aussi aux erreurs de spécifications :@: