Je suis dans un dilemme concernant la sauvegarde des valeurs de date et d'heure au format TIMESTAMP de MySQL vs dans un format UNSIGNED INT personnalisé. Les principales considérations ici sont la vitesse de récupération, les calculs de plage appropriés en PHP et le formatage occasionnel en valeurs lisibles par l'homme.
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 du tout besoin de la gamme DATETIME. Je suis déchiré entre TIMESTAMP et UNSIGNED INT.
Arguments en faveur d'UNSIGNED INT:
Le seul avantage que TIMESTAMP me donnerait, c'est lorsque je lis manuellement les valeurs de la table mysql et que je dois les "voir".
Y a-t-il une raison impérieuse d'utiliser TIMESTAMP et non un UNSIGNED INT?
Arguments pour TIMESTAMP
DEFAULT CURRENT_TIMESTAMP
Ou ON UPDATE CURRENT_TIMESTAMP
(Une colonne par table uniquement jusqu'à MySQL 5.6.5)FROM_UNIXTIME()
- cela facilitera l'écriture de requêtes pouvant utiliser des indexEn PHP
>> date('Y-m-d h:i:s',4294967295);
'1969-12-31 11:59:59'
donc la gamme est en fait la même
Lorsque UNIX_TIMESTAMP () est utilisé sur une colonne TIMESTAMP, la fonction renvoie directement la valeur d'horodatage interne, sans conversion implicite de "chaîne en horodatage Unix"
La seule utilisation réelle de TIMESTAMP est lorsque vous souhaitez que ce champ soit mis à jour automatiquement lorsque la ligne est mise à jour (ce qui est le comportement par défaut pour ce champ), ou lorsque les exigences de stockage de données sont si strictes que 4 octets par ligne font vraiment une différence pour tu.
Vraiment, la comparaison devrait être entre DATETIME et UNSIGNED INT, et je recommanderais DATETIME parce que:
SELECT UNIX_TIMESTAMP(field) FROM table
, pas besoin de sélectionner la valeur brute et d'utiliser strtotimeLe point deux à lui seul supprime vraiment toute raison de stocker des nombres entiers, à mon avis.
Ce n'est peut-être pas une réponse "scientifique" mais je trouve toujours la façon dont MySql gère la conversion, l'arithmétique, la comparaison, etc ... sur les colonnes TIMESTAMP déroutante. Une colonne UNSIGNED INT est beaucoup plus simple et je sais toujours à quoi m'attendre.
P.S. Peut-être une autre chose en faveur de la colonne TIMESTAMP est sa capacité à être automatiquement réglée sur l'heure actuelle après chaque mise à jour ou insertion, mais ce n'est pas quelque chose dont vous ne pouvez pas vous passer.