Les types date et heure
<<<
Comportement de TIMESTAMP avant MySQL 4.1 Propriétés de TIMESTAMP depuis la version 4.1
>>>

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

->Comportement de TIMESTAMP avant MySQL 4.1
Propriétés de TIMESTAMP depuis la version 4.1

12.3.1.1 Comportement de TIMESTAMP avant MySQL 4.1

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.

<< Comportement de TIMESTAMP avant MySQL 4.1 >>
Les types date et heure Les types DATETIME , DATE , et TIMESTAMP Propriétés de TIMESTAMP depuis la version 4.1