2009-01-22 10 views

Répondre

5
  • TIMESTAMP est stocké dans une méthode brevetée MySQL (si elle est fondamentalement juste une chaîne composée de l'année, mois, jour, heure, minutes et secondes) et, en outre, un champ de type TIMESTAMP est mis à jour automatiquement à chaque fois que le dossier est introduite ou modifiée et aucune valeur de champ explicite est donnée:

    mysql> create table timestamp_test(
        id integer not null auto_increment primary key, 
        val varchar(100) not null default '', ts timestamp not null); 
    Query OK, 0 rows affected (0.00 sec) 
    
    mysql> insert into timestamp_test (val) values ('foobar'); 
    Query OK, 1 row affected (0.00 sec) 
    
    mysql> select * from timestamp_test; 
    +----+--------+----------------+ 
    | id | val | ts    | 
    +----+--------+----------------+ 
    | 1 | foobar | 20090122174108 | 
    +----+--------+----------------+ 
    1 row in set (0.00 sec) 
    
    mysql> update timestamp_test set val = 'foo bar' where id = 1; 
    Query OK, 1 row affected (0.00 sec) 
    Rows matched: 1 Changed: 1 Warnings: 0 
    
    mysql> select * from timestamp_test; 
    +----+---------+----------------+ 
    | id | val  | ts    | 
    +----+---------+----------------+ 
    | 1 | foo bar | 20090122174123 | 
    +----+---------+----------------+ 
    1 row in set (0.00 sec) 
    
    mysql> 
    
  • DATETIME est le type de données standard pour les dates et les heures qui fonctionne conjointement avec les fonctions de date et d'heure dans MySQL. J'utiliserais probablement ceci en pratique

  • Il est déconseillé de stocker des dates au format INTEGER, car vous ouvrez une véritable boîte de Pandore en raison de problèmes intéressants comme les fuseaux horaires, les années bissextiles, etc. - du moins si vous avez l'intention de interroger la base de données en fonction des dates spécifiques stockées dans ce champ.
+0

Merci beaucoup par exemple avec le champ à changement automatique. C'est très important de savoir (pour moi, au moins). –

2

Eh bien, je suppose que ce qui suit aiderait à clarifier.

La date et l'heure peuvent être stockées dans un champ DATETIME dans mysql.

TIMESTAMP est utilisé si vous souhaitez horodater quand une ligne a été créée - le champ sera automatiquement rempli à la création. L'utilisation d'un nombre entier pour une Date est légèrement trop lourde, car c'est essentiellement ce que DATETIME fait, mais il effectue toutes les conversions fastidieuses pour vous.

Y a-t-il un avantage ou un inconvénient particulier que vous souhaitez découvrir?

2

L'horodatage dans mysql peut être très difficile. Si elle n'est pas déclarée soigneusement, vous pouvez vous retrouver avec un champ qui change automatiquement sa valeur à chaque mise à jour de ligne (même si vous ne la mettez pas à jour explicitement).

http://dev.mysql.com/doc/refman/5.0/en/timestamp.html

3

J'enregistrer des données en utilisant les champs DATETIME ou DATE dans MySQL. Au moins, si vous allez stocker des valeurs de date jusqu'à l'année 2038: http://en.wikipedia.org/wiki/Year_2038_problem. Si vous utilisez un système qui stocke les entiers différemment, vous ne pouvez pas avoir ce problème.

Il est toujours facile de comparer des valeurs de date ou même des horodatages.

SELECT * FROM myTable WHERE startDate > '2009-01-01' 
SELECT * FROM myTable WHERE UNIX_TIMESTAMP(startDate) > 1232541482 
0

Si vous avez besoin d'une fidélité en millisecondes pour un horodatage, vous devez l'enregistrer en tant qu'entier. Soyez prudent cependant, cela peut compliquer les choses.