Je ne sais pas comment spécifier mon type de données comme datetime ou timestamp, je pense que j'aurai besoin des deux mais sur les différents événements. Mon site Web vend des produits et des services dans le monde entier et dispose également d'un système de compte permettant à l'utilisateur de se connecter. Veuillez clarifier les points suivants:
La dernière fois qu'ils se sont connectés sur leur compte: Horodatage?
MySQL horodatages :
Sont stockés dans UTC
Ils sont convertis en UTC lors du stockage et reconvertis dans votre fuseau horaire lors de la récupération. Si vous modifiez les paramètres de fuseau horaire , les valeurs récupérées changent également.
Peut être automatiquement initialisé et mis à jour
Vous pouvez définir leur valeur par défaut et/ou la valeur de mise à jour automatique sur CURRENT_TIMESTAMP
Avoir une plage de 1970-01-01 00:00:01 UTC
À 2038-01-19 03:14:07 UTC
Alors que MySQL datetime :
Ce que vous stockez, c'est ce que vous obtenez ™.
Avoir une plage de 1000-01-01 00:00:00
À 9999-12-31 23:59:59
Les valeurs en dehors de la plage peuvent fonctionner - mais seules les valeurs dans la plage sont garanties pour fonctionner.
Vous pouvez stocker des dates où le jour ou le mois est égal à zéro.
C'est la façon MySQL de stocker les anniversaires! Vous ne pouvez pas faire cela avec un TIMESTAMP
, à la seule exception étant la valeur zéro de 0000-00-00
.
Vous pouvez stocker des dates non valides, si vous en avez besoin, en mode ALLOW_INVALID_DATES .
Vous pouvez définir la valeur par défaut sur NOW()
dans certains cas, mais le moyen préférable et plus naturel de dates automatiquement initialisées et mises à jour est TIMESTAMP
.
Et bien sûr, il y a aussi DATE
et TIME
, qui fonctionnent exactement comme DATETIME
, mais bien sûr DATE
ne se soucie pas du temps et TIME
ne se soucie pas de la date. Les quatre types de données fonctionnent parfaitement avec le large éventail de fonctions de date et d'heure , mais lorsque vous mélangez des types de données, vous devez être conscient de effets de conversion .
Maintenant, à votre question: vous devez utiliser DATETIME
partout. Pas pour des raisons techniques, mais comme vous ne savez toujours pas comment MySQL fonctionne, DATETIME
est le choix le plus simple. Cela signifie que vous devrez calculer l'horodatage actuel en PHP avant de le stocker, c'est aussi simple que:
$mysqldate = date("Y-m-d H:i:s");
fonction de date de PHP fonctionne comme:
string date ( string $format [, int $timestamp = time() ] )
Le format "Y-m-d H:i:s"
Est celui compatible avec MySQL et en laissant le second paramètre vide, date()
appelle time()
pour obtenir le courant horodatage UNIX .
L'utilisation d'un TIMESTAMP
au lieu d'un DATETIME
a la valeur ajoutée de MySQL qui prend la responsabilité de décider de l'horodatage actuel, et vous pouvez ignorer le champ lorsque vous insérez/mettez à jour. Mais puisque vous envoyez déjà une requête, et le code pour obtenir l'horodatage actuel en PHP est minimal, vous pouvez aller en toute sécurité avec DATETIME
pour tout.
Quant au code réel pour stocker le PHP horodatage dans la base de données, vous devriez regarder PHP Data Objects , et si vous n'êtes toujours pas clair, demandez StackOverflow à la place. Mais il y a presque 1.5k questions liées déjà, assurez-vous de les parcourir avant de demander. Juste un indice, déclarations préparées est de savoir comment le cool les enfants le font.
Référence tirée de cet article:
Les principales différences:
TIMESTAMP permet de suivre les modifications apportées aux enregistrements et de les mettre à jour chaque fois que l'enregistrement est modifié. DATETIME utilisé pour stocker une valeur spécifique et statique qui n'est affectée par aucun changement dans les enregistrements.
TIMESTAMP est également affecté par différents paramètres liés à TIME ZONE. DATETIME est constant.
TIMESTAMP a converti en interne le fuseau horaire actuel en UTC pour le stockage, et pendant la récupération, il a été reconverti dans le fuseau horaire actuel. DATETIME ne peut pas faire cela.
Plage prise en charge par TIMESTAMP: '1970-01-01 00:00:01 ′ UTC à' 2038-01-19 03:14:07 'UTC DATETIME plage prise en charge:' 1000-01-01 00:00:00 ′ à '9999 -12-31 23:59:59 ′