| 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 : 
 
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
 ).
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
 . 
 
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 : 
Attention à certains pièges concernant les spécifications de dates :
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. 
 
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 : |