2010-03-28 5 views
19

Probablement beaucoup de codeurs veulent poser cette question. c'est Quels sont les aventures de chacun de ces formats d'heure MySQL. et celui que vous préférerez l'utiliser dans vos applications. Pour moi, j'utilise l'horodatage Unix parce que peut-être je trouve qu'il est facile de convertir & enregistrements de commande avec elle, et aussi parce que je n'ai jamais essayé la chose DATETIME. mais de toute façon je suis prêt à changer d'avis si quelqu'un me dit que je me trompe.MySQL: Quel est le meilleur à utiliser, Unix TimeStamp ou DATETIME

Merci

+0

Similaire: http://stackoverflow.com/questions/409286/datetime-vs-timestamp –

Répondre

16

Horodatage (à la fois ceux PHP et de celles du MySQL) sont stockés en utilisant 32 bits (à savoir 4 octets) entiers; ce qui signifie qu'ils sont limités à une période qui va de 1970 à 2038.

DATETIME ne pas cette limite - mais sont stockés en utilisant plus octets (8 octets, si je ne me trompe pas)


Après, entre le stockage horodatages vu par PHP, ou horodatages vu par MySQL:


Et, pour plus d'informations entre TIMESTAMP et DATETIME les types de données de MySQL, consultez 10.3.1. The DATETIME, DATE, and TIMESTAMP Types

+3

Ils sont limités _now_ à 32 bits :) –

+4

Qui utilise les systèmes 32 bits en 2038? –

+0

'new java.util.Date(). GetTime()' est déjà en 64 bits. – osa

1

À moins la numérisation des documents avant le 1er Janvier 1970, J'aime l'époque UNIX. C'est juste une question de préférence, les nombres entiers non signés sont plus simples à traiter lors de l'utilisation de plusieurs langues. N'oubliez pas que l'époque débute le 1er janvier 1970. Beaucoup d'entreprises étaient déjà en affaires depuis des décennies, sinon plus.

+0

Un Timestamps Unix, dans un entier signé de 32 bits, peut stocker des dates remontant à 1901, car il peut s'étendre de -2147483647 (13 décembre 1901 20:45:53 UTC) à 2147483647 (19 janvier 2038 3:14:07 UTC) –

9

Comme d'autres l'ont dit, les horodatages peuvent représenter une plus petite plage de dates (de 1970 à 2038). Cependant, les horodatages mesurent le nombre de secondes écoulées depuis l'Epoque Unix (1970-01-01 00:00:00 UTC), ce qui les rend indépendants du fuseau horaire, tandis que DATETIME stocke une date et une heure sans fuseau horaire. En d'autres termes, les horodatages référencent sans ambiguïté un point particulier dans le temps, alors que le point précis auquel un DATETIME fait référence nécessite un fuseau horaire (qui n'est pas stocké dans un champ DATETIME). Pour voir pourquoi cela peut être important, réfléchissez à ce qui se passe si nous changeons notre fuseau horaire.

Disons que nous voulons stocker le datetime 2010-03-27 12:00 UTC. Si nous stockons cela et que nous l'extrayons en utilisant un horodatage ou DATETIME, il ne semble généralement pas y avoir de différence. Cependant, si le serveur change maintenant pour que le fuseau horaire local soit UTC + 01, alors nous obtenons deux résultats différents si nous sortons le datetime.

Si nous définissions le champ sur DATETIME, il signalerait le datetime en tant que 2010-03-27 12:00, malgré le changement de fuseau horaire. Si nous définissions le champ sur un horodatage, la date serait signalée comme 2010-03-27 11:00. Ce n'est pas un problème avec l'un ou l'autre type de données - c'est juste le résultat du fait qu'ils stockent des informations légèrement différentes.

+0

Timestamps Unix, dans un entier signé 32 bits, peut stocker des dates remontant à 1901, car il peut s'étendre de -2147483647 (13 décembre 1901 8:45:53 PM UTC) à 2147483647 (19 janvier 2038 3:14:07 UTC) –

2

Cela dépend vraiment.Je vais vous donner 2 exemples où l'un surmonte l'autre:

Horodatage est meilleur que DATETIME lorsque vous souhaitez stocker la session des utilisateurs dans la base de données et l'heure de création de la session (au format Timestamp) est utilisée pour la récupération rapide de ligne (avec indice).
E.g. table peut ressembler à ceci:
[session_create_time AS Timestamp][IP_address AS 32bit Int][etc...]
Avoir un index sur les deux premières colonnes peut vraiment accélérer vos requêtes. Si vous avez un type de valeur DATETIME pour le champ session_create_time, cela peut prendre beaucoup plus de temps. Tenez compte du fait que les requêtes de session sont exécutées chaque fois qu'un utilisateur demande une page, l'efficacité est donc cruciale. DATETIME est meilleur que Timestamp lorsque vous souhaitez stocker la date de naissance d'un utilisateur ou certains événements historiques nécessitant une plage de temps flexible.

+0

Un Timestamps Unix, dans un entier signé de 32 bits, peut stocker des dates remontant à 1901, car il peut s'étendre de -2147483647 (13 décembre, 1901 20:45:53 UTC) à 2147483647 (19 janvier 2038 3:14:07 UTC). Donc, sauf si vous stockez une date avant 1901, un horodatage fonctionnerait. –

Questions connexes