Types de colonnes
<<<
Les types DATETIME , DATE , et TIMESTAMP Le type TIME
>>>

12.3 Les types date et heure
12 Types de colonnes
 Manuel de Référence MySQL 4.1 : Version Française

->Les types DATETIME , DATE , et TIMESTAMP
Le type TIME
Le type YEAR
An 2000 et les types date

12.3.1 Les types DATETIME , DATE , et TIMESTAMP

Les types DATETIME , DATE , et TIMESTAMP sont liés. Cette section décrit leurs caractéristiques, leur similarités et leurs différences.

Le type DATETIME est prévu lorsque vous souhaitez stocker une date et une heure. MySQL affiche les valeurs de type DATETIME au format ' AAAA-MM-JJ HH:MM:SS '. L'intervalle de validité va de ' 1000-01-01 00:00:00 ' à ' 9999-12-31 23:59:59 '. (``validité'' signifie que même si d'autres valeurs plus anciennes peuvent être manipulées, il n'est pas garantit qu'elles le seront).

Le type DATE est prévu lorsque vous souhaitez stocker une date. MySQL affiche les valeurs de type DATE au format ' AAAA-MM-JJ '. L'intervalle de validité va de '1000-01-01' à '9999-12-31' .

La colonne TIMESTAMP a vu ses propriétés et comportements évoluer avec les versions de MySQL et le mode SQL du serveur.

Vous pouvez spécifier les valeurs des colonnes DATETIME , DATE et TIMESTAMP , avec les formats communs suivants :

  • Une chaîne au format 'AAAA-MM-JJ HH:MM:SS' ou 'AA-MM-JJ HH:MM:SS' . Une syntaxe plus souple est permise : tout caractère de ponctuation peut être utilisé comme délimiteur entre les parties de temps ou heure. Par exemple, '98-12-31 11:30:45' , '98.12.31 11+30+45' , '98/12/31 11*30*45' , et '98@12@31 11^30^45' sont équivalents.
  • Une chaîne au format ' AAAA-MM-JJ ' ou ' AA-MM-JJ '. Une syntaxe plus flexible est aussi acceptée ici. Par exemple, ' 98-12-31 ', ' 98.12.31 ', ' 98/12/31 ', et ' 98@12@31 ' sont équivalent.
  • Une chaîne sans aucun délimiteurs sous la forme ' AAAAMMJJHHMMSS ' ou ' AAMMJJHHMMSS ', en supposant qu'une telle chaîne ait un sens en terme de date. Par exemple ' 19970523091528 ' et ' 970523091528 ' sont interprétés comme ' 1997-05-23 09:15:28 ', mais ' 971122129015 ' est invalide (les minutes ne sont pas valides) et devient alors ' 0000-00-00 00:00:00 '.
  • Une chaîne sans aucun délimiteurs sous la forme ' AAAAMMJJ ' ou ' AAMMJJ ', en supposant qu'une telle chaîne ait un sens en terme de date. Par exemple, ' 19970523 ' et ' 970523 ' sont interprétés comme ' 1997-05-23 ', mais ' 971332 ' est invalide (les mois ne sont pas valides) et devient alors ' 0000-00-00 '.
  • Un nombre au format AAAAMMJJHHMMSS ou AAMMJJHHMMSS , en supposant qu'un tel nombre ait un sens en terme de date. Par exemple, 19830905132800 et 830905132800 sont interprétés comme ' 1983-09-05 13:28:00 '.
  • Un nombre au format AAAAMMJJ ou AAMMJJ en supposant qu'un tel nombre ait un sens en terme de date. Par exemple, 19830905 et 830905 sont interprétés comme ' 1983-09-05 '.
  • Un résultat de fonction qui retourne une valeur acceptable dans une colonne de type DATETIME , DATE , ou TIMESTAMP , tels que NOW() ou CURRENT_DATE .
Les valeurs invalides DATETIME , DATE , ou TIMESTAMP sont remplacées par la date ``zéro'' du type approprié (respectivement ' 0000-00-00 00:00:00 ', ' 0000-00-00 ', ou 00000000000000 ).

Pour la valeurs spécifiées sous forme de chaînes avec des délimiteurs de date, il n'est pas nécessaire de spécifier les deux chiffres pour les mois ou les dates qui sont inférieurs à 10 . Par exemple, ' 1979-6-9 ' est valide et est équivalent à ' 1979-06-09 '. Similairement, pour les valeurs spécifiées sous forme de chaîne avec des délimiteurs d'heure, il n'est pas obligatoire de spécifier les deux chiffres des heures, minutes et secondes qui sont inférieures à 10 . ' 1979-10-30 1:2:3 ' est valide et est équivalent à ' 1979-10-30 01:02:03 '.

Les valeurs spécifiées sous forme de nombres doivent avoir 6, 8, 12, ou 14 chiffres de long. Si le nombre a 8 ou 14 chiffres, MySQL suppose que le format est AAAAMMJJ ou AAAAMMJJHHMMSS (respectivement) et que l'année est représentées par les 4 premiers chiffres. Si le nombre a 6 ou 12 chiffres, MySQL suppose que le format est AAMMJJ ou AAMMJJHHMMSS (respectivement) et format et que l'année est représentées par les 2 premiers chiffres. Les nombres qui ne sont pas d'une taille valide, sont complétés avec des 0 jusqu'à la taille lisible la plus proche.

Les valeurs spécifiées sous forme de chaînes sans délimiteurs sont interprétés en fonction de leur taille. Si la chaîne à 8 ou 14 caractères de long, l'année est supposée avoir 4 chiffres. Sinon, l'année est supposée avoir 2 chiffres. La chaîne est interprétée de gauche à droite, en lisant successivement l'année, le mois, la date, l'heure, les minutes et les secondes, tant qu'il y a des valeurs dans la chaîne. Cela signifie que vous ne devez pas utiliser de chaînes qui ont moins de 6 caractères. Par exemple, si vous spécifiez ' 9903 ', en pensant qu'il représente Mars 1999, vous vous apercevrez que MySQL insère à la place la date ``zéro'' dans votre table. Cela est dû au fait que si l'année et le mois sont 99 et 03, la date est 0, ce qui en fait une date invalide, qui est rejetée par MySQL.

Dans une certaines mesure, vous pouvez assigner des valeurs d'une colonne à une autre colonne d'un autre type. Cependant, vous devez vous attendre à quelques altération ou pertes de valeurs durant la conversion :
  • Si vous assignez une valeur DATE à une colonne de type DATETIME ou TIMESTAMP , la partie représentant les heures vaudra ' 00:00:00 ', car les colonnes de type DATE ne contiennent pas d'information d'heure.
  • Si vous assignez une valeur DATETIME ou TIMESTAMP à une colonne de type DATE , la composante heure sera perdue, car les colonnes de type DATE ne contiennent pas d'information d'heure.
  • N'oubliez pas que même si les valeurs DATETIME , DATE , et TIMESTAMP peuvent être spécifiée avec différents formats, ces types n'ont pas les mêmes intervalle de validité. Par exemple, les valeurs de type TIMESTAMP ne peuvent pas prendre de valeur antérieure à 1970 ou postérieure à 2037. Cela signifie qu'une date telle que ' 1968-01-01 ', est légale dans les colonnes de type DATETIME , mais n'est pas valide pour les TIMESTAMP , et sera convertie en date zéro ( 0 ) si elle est assignée à une telle colonne.
Attention à certains pièges concernant les spécifications de dates :
  • La syntaxe à délimiteur libre peut être une source de problème. Par exemple, une valeur telle que ' 10:11:12 ' ressemble à une heure, à cause du délimiteur ` ':' ', mais avec une colonne de date, elle sera interprétée comme la date ' 2010-11-12 '. La valeur ' 10:45:15 ' sera convertie en ' 0000-00-00 ' car ' 45 ' n'est pas un mois valide.
  • Le serveur MySQL effectue seulement la vérification de base la validité d'une date : jours 00-31 , mois 00-12 , années 1000-9999 . N'importe quelle date qui n'est pas dans cette marge retournera 0000-00-00 . Veuillez noter que ceci vous permet toujours de stocker les dates inadmissibles telles que 2002-04-31 . Il permet à des applications web de stocker des données d'une forme sans vérifier plus loin. Pour s'assurer qu'une date est valide, vous devrez effectuer un test dans votre application.
  • Les années spécifiée avec deux chiffres seulement sont ambiguÎs, car il manque le siècle. MySQL interprète les années à deux chiffres suivant ces règles :
    • Les années de l'intervalle 00-69 sont converties en 2000-2069 .
    • Les années de l'intervalle 70-99 sont converties en 1970-1999 .

Sommaire :

<< Les types DATETIME , DATE , et TIMESTAMP >>
Types de colonnes Les types date et heure Le type TIME