À l'aide de MySQL TIMESTAMP vs stocker les horodatages directement
Je suis dans un dilemme sur l'enregistrement de la date et de l'heure dans MySQL format d'HORODATAGE vs personnalisé dans un UNSIGNED INT format. Les principales considérations sont la vitesse de récupération, de la plage appropriée calculs en PHP et occasionnel de la mise en forme dans, lisible par les valeurs.
L'espace de stockage requis pour chaque type et leurs gammes:
DATETIME 8 bytes '1000-01-01 00:00:00' to '9999-12-31 23:59:59'
TIMESTAMP 4 bytes '1970-01-01 00:00:01' UTC to '2038-01-19 03:14:07' UTC
UNSIGNED INT 4 bytes (Maximum Value 4294967295)
Je n'ai pas besoin de la gamme de date à tous. Je suis déchiré entre l'HORODATAGE et la UNSIGNED INT.
Arguments en faveur d'un UNSIGNED INT:
- Un timestamp UNIX de 4294967295 convertit à la Sun, 07 Feb 2106 06:28:15 GMT qui est plus que l'HORODATAGE et assez bon pour moi
- De la comparaison de ces horodatages directement en PHP serait plus rapide, plutôt que de convertir les Horodatages via la fonction strtotime (), puis en les comparant
Le seul avantage d'HORODATAGE me donnerait, c'est quand je suis en train de lire dans les valeurs de la table mysql manuellement et ont besoin de "voir" leur.
Est-il une raison impérieuse d'utiliser l'HORODATAGE et pas un UNSIGNED INT?
- Voir: datetime vs timestamp?
- Un 32bit timestamp ne va pas jusqu'à janvier 2038, et de nombreuses bibliothèques sont encore en utilisant 32 bits time_t lieu de 64 bits, de sorte que vous pouvez courir dans des problèmes de portabilité. En interne, PHP stocke les horodateurs/datetime au format numérique, de toute façon, et convertit uniquement à la belle aaaa-mm-jj type de cordes sur la récupération.
Vous devez vous connecter pour publier un commentaire.
Arguments pour TIMESTAMP
DEFAULT CURRENT_TIMESTAMP
ouON UPDATE CURRENT_TIMESTAMP
(une colonne par table jusqu'à ce que MySQL 5.6.5)FROM_UNIXTIME()
la fonction, c'est plus facile d'écrire des requêtes qui peuvent utiliser les indexEn PHP
donc la plage est en fait la même
echo date('Y-m-d h:i:s',4294967295);
pour moi donne 2106-02-07 06:28:15 - êtes-vous à l'aide d'un 32-bit OS?La seule réelle utilité pour le TIMESTAMP, c'est quand vous voulez que le champ sera mis à jour automatiquement lorsque la ligne est mise à jour (ce qui est le comportement par défaut pour ce champ), ou lorsque les besoins de stockage de données sont tellement strictes que 4 octets par ligne fait vraiment une différence pour vous.
Vraiment la comparaison doit être entre DATETIME et UNSIGNED INT, et je le recommande DATETIME parce que:
SELECT UNIX_TIMESTAMP(field) FROM table
, pas besoin de sélectionner la valeur brute et utiliser la fonction strtotimePoint deux seuls vraiment enlève toute raison de stocker des nombres entiers, à mon avis.
UNIX_TIMESTAMP
je ne le savais pas avant maintenant.Cela pourrait ne pas être un "scientifique" réponse mais je trouve toujours le moyen de MySql gère la conversion, de l'arithmétique, comparaison, etc... sur les colonnes de type TIMESTAMP à confusion. Un UNSIGNED INT colonne est beaucoup plus simple et je sais toujours à quoi s'attendre.
P. S. peut-être une autre chose en faveur de la colonne TIMESTAMP, c'est sa capacité à être automatiquement défini à l'heure actuelle, après chaque mise à jour ou insérez mais ce n'est pas quelque chose que vous ne pouvez pas vivre sans.