web-dev-qa-db-fra.com

Datetime vs Timestamp dans MySQL et PHP dans la pratique?

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:

  • Date et heure actuelles où le client achète des produits sur mon site Web: Datetime?
  • Date et heure de livraison en fonction de leur emplacement et date/heure d'achat, calculées à partir de notre système: Datetime?
  • La dernière fois qu'ils se sont connectés sur leur compte: Horodatage?

    1. Quel est le code en php pour stocker la date d'achat (date actuelle) puis la stocker dans la base de données?
    2. Veuillez expliquer comment utiliser chacun d'eux car après avoir lu de nombreuses explications sur Internet, je ne comprends toujours pas très bien.
24
Modular

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.

29
yannis

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 ′

2
Anvesh