Le type TIMESTAMP
est prévu pour stocker
automatiquement l'heure courante lors d'une commande
INSERT
ou UPDATE
. Si
vous avez plusieurs colonnes de type
TIMESTAMP
, seule la première colonne sera
mise à jour automatiquement.
La modification automatique de la première colonne de type
TIMESTAMP
survient si l'une des conditions
suivantes est remplie :
Vous insérez explicitement la valeur
NULL
dans la colonne.
La colonne n'est pas spécifiée explicitement dans la
commande INSERT
ou LOAD DATA
INFILE
.
La colonne n'est pas spécifiée explicitement dans la
commande UPDATE
et d'autres colonnes
changent de valeurs (Notez qu'une commande
UPDATE
qui affecte une valeur qui est
déjà celle de la colonne sera ignorée, et la colonne
TIMESTAMP
ne sera pas modifiée, car la
ligne n'est pas à proprement parlée modifiée. MySQL
ignore alors ces modifications pour des raisons
d'efficacité).
Les autres colonnes de type TIMESTAMP
,
hormis la première, peuvent aussi prendre la valeur courante.
Affectez-lui alors la valeur NULL
ou la
fonction NOW()
.
Vous pouvez affecter à n'importe quelle colonne de type
TIMESTAMP
une valeur différente de l'heure
et la date courant en fournissant une valeur explicite. Cela
s'applique aussi à la première colonne de type
TIMESTAMP
. Par exemple, si vous voulez
affecter la date de création d'une ligne à une colonne de
type TIMESTAMP
, mais ne plus y toucher
ultérieurement :
Laissez MySQL donner la valeur de la colonne lors de la création de la ligne. Cela va initialiser la colonne à la date et heure courante.
Lorsque vous faites des modifications ultérieures,
affectez explicitement à la colonne
TIMESTAMP
sa propre valeur.
UPDATE tbl_name SET timestamp_col = timestamp_col, other_col1 = new_value1, other_col2 = new_value2, ...
D'un autre coté, vous pouvez aussi facilement initialiser la
colonne TIMESTAMP
avec
NOW()
lors de sa création, puis ne plus la
modifier ultérieurement.
L'intervalle de validité des valeurs
TIMESTAMP
va du début de l'année 1970
jusque quelque part durant l'année 2037, avec une précision
d'une seconde. Les valeurs sont affichés comme des nombres
entiers.
Le format d'affichage des valeurs TIMESTAMP
dépend de la taille d'affichage, comme illustré ci-dessous.
Le format total TIMESTAMP
a 14 chiffres,
mais les colonnes TIMESTAMP
peuvent être
créées avec des formats plus courts :
Type de colonne | Format d'affichage |
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 TIMESTAMP
ont
la même taille de stockage, indépendamment de la taille
d'affichage. Les formats les plus courants sont 6, 8, 12, et
14. Vous pouvez spécifier une taille arbitraire lors de la
création de la table, mais 0 et les valeurs supérieures à
14 sont ramenées à 14. Les valeurs impaires sont aussi
ramenées au nombre pair supérieur.
Les colonnes TIMESTAMP
stockent une date
valide, en utilisant la totalité de l'espace de stockage,
quelque soit la valeur de l'affichage. Cela a les implication
suivantes :
Spécifiez toujours l'année, le mois et le jour, même si
le type de colonne est TIMESTAMP(4)
ou
TIMESTAMP(2)
. Sinon, la valeur ne sera
pas légale et 0
sera stockée.
Si vous utilisez la commande ALTER
TABLE
pour réduire la largeur d'une colonne
TIMESTAMP
, les informations qui
étaient affichées sont désormais ``cachées'', mais pas
détruites.
Similairement, réduire une colonne de type
TIMESTAMP
ne cause aucune perte
d'information, en dehors du fait que ces informations ne
sont plus affichées.
Bien que les valeurs TIMESTAMP
soient
stockées avec une précision d'une seconde, la seule
fonction qui travaille directement avec ces valeurs est la
fonction UNIX_TIMESTAMP()
. Les autres
fonctions opèrent sur des valeurs lues et formatées.
Cela signifie que vous ne pouvez pas utiliser de fonctions
telles que HOUR()
ou
SECOND()
a moins que le format
d'affichage de la valeur TIMESTAMP
ne
présente cette valeur. Par exemple, les heures ne sont
jamais affichées dans une colonne de type
TIMESTAMP
à moins que la taille
d'affichage de la colonne ne soit d'au moins 10.
L'utilisation de la fonction HOUR()
sur
une valeur ayant un format d'affichage plus court que
10
retournera un résultat
inutilisable.
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.