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 :
|