Datetime vs Timestamp in MySQL e PHP in pratica?

24

Non sono sicuro di come specificare il mio tipo di dati come datetime o timestamp, penso che avrò bisogno di entrambi, ma sui diversi eventi. Il mio sito Web vende prodotti e servizi in tutto il mondo e ha anche un sistema di account per l'accesso dell'utente. Si prega di chiarire quanto segue:

  • La data e l'ora correnti acquistano i prodotti dal mio sito Web: Data / ora?
  • Data e ora di consegna in base alla posizione e alla data / ora acquistati, calcolati dal nostro sistema: Data / ora?
  • L'ultima volta che hanno effettuato l'accesso sul proprio account: Timestamp?

    1. Qual è il codice in php per memorizzare la data di acquisto (data corrente) e quindi memorizzarlo nel database?
    2. Si prega di elaborare come utilizzare ciascuno di essi come dopo aver letto molte spiegazioni su internet, non riesco ancora a capirlo.
posta Modular 20.12.2011 - 23:01
fonte

3 risposte

29

MySQL timestamp :

  • Sono memorizzati in UTC

    Vengono convertiti in UTC in memoria e riconvertiti nel fuso orario al momento del recupero. Se modifica le impostazioni del fuso orario , anche i valori recuperati cambiano.

  • Può essere inizializzato e aggiornato automaticamente

    Puoi impostare il loro valore predefinito e / o il valore di aggiornamento automatico su CURRENT_TIMESTAMP

  • Hai un intervallo di 1970-01-01 00:00:01 UTC in 2038-01-19 03:14:07 UTC

Mentre MySQL datetime :

  • Ciò che memorizzi è ciò che ottieni ™.

  • Hai un intervallo di 1000-01-01 00:00:00 in 9999-12-31 23:59:59

    I valori al di fuori dell'intervallo potrebbero funzionare - ma solo i valori all'interno dell'intervallo sono garantiti per funzionare.

  • È possibile memorizzare date in cui il giorno o il mese è zero.

    Questo è il modo MySQL di memorizzare i compleanni! Non puoi farlo con un TIMESTAMP , con l'unica eccezione al valore zero di 0000-00-00 .

  • È possibile memorizzare date non valide, se necessario, in ALLOW_INVALID_DATES in modalità.

  • È possibile impostare il valore predefinito su NOW() in alcuni casi, ma il modo preferibile e più naturale di date inizializzate e aggiornate automaticamente è TIMESTAMP .

E naturalmente ci sono anche DATE e TIME , che funzionano come DATETIME , ma ovviamente DATE non si preoccupa del tempo e TIME non si cura della data. Tutti e quattro i tipi di dati funzionano perfettamente con l'ampia gamma di funzioni di data e ora , ma quando si mescolano i tipi di dati si dovrebbe essere consapevoli di effetti di conversione .

Ora, alla tua domanda: dovresti usare DATETIME ovunque. Non per ragioni tecniche, ma poiché non sei ancora chiaro come funziona MySQL, DATETIME è la scelta più semplice. Ciò significa che dovrai calcolare il timestamp corrente in PHP prima di archiviare, questo è facile come:

$mysqldate = date("Y-m-d H:i:s"); 

La funzione della data di PHP funziona come:

string date ( string $format [, int $timestamp = time() ] )

Il formato "Y-m-d H:i:s" è quello compatibile con MySQL e lasciando il secondo parametro vuoto, date() chiama time() per ottenere l'attuale UNIX timestamp .

L'utilizzo di una TIMESTAMP invece di una DATETIME ha il valore aggiunto di MySQL che si assume la responsabilità di decidere il timestamp corrente, e puoi saltare il campo quando stai inserendo / aggiornando. Ma poiché stai già inviando una query e il codice per ottenere il timestamp corrente in PHP è minimo, puoi tranquillamente andare con DATETIME per tutto.

Per quanto riguarda il codice effettivo per memorizzare il timestamp di PHP nel database, dovresti dare un'occhiata a Oggetti dati PHP , e se non sei ancora chiaro, chiedi invece StackOverflow . Ma ci sono già quasi 1.5k domande correlate , assicurati di esaminarle prima di chiedere. Solo un suggerimento, istruzioni preparate è come i ragazzi lo fanno.

    
risposta data 21.12.2011 - 02:19
fonte
2

Riferimento tratto da questo articolo:

Le principali differenze:

TIMESTAMP utilizzato per tenere traccia delle modifiche ai record e aggiornare ogni volta che viene modificato il record. DATETIME utilizzato per memorizzare valori specifici e statici che non sono interessati da eventuali modifiche nei record.

TIMESTAMP influenzato anche dalle diverse impostazioni relative a TIME ZONE. DATETIME è costante.

TIMESTAMP ha convertito internamente il fuso orario corrente in UTC per l'archiviazione e durante il recupero convertito nel fuso orario corrente. DATETIME non può farlo.

Intervallo supportato da TIMESTAMP: '1970-01-01 00:00:01' UTC a '2038-01-19 03:14:07' UTC Intervallo supportato da DATETIME: '1000-01-01 00:00:00' a '9999-12-31 23:59:59'

    
risposta data 07.02.2016 - 13:56
fonte
-1

Bene, lo guardo in modo molto semplice. Nel tuo caso, userei sia datetime che timestamp . Con l'utilizzo di entrambi non si avranno ulteriori problemi con la memorizzazione dei dati o qualcosa del genere. Un altro campo (colonna) nella tabella non è un grosso problema.

Quindi, dal mio punto di vista e dalle mie esperienze, di solito uso entrambi. Quando si desidera mostrare una data al visitatore o renderla comprensibile ai visitatori, visualizzare una data in formato datetime.

Il formato datetime potrebbe essere un problema quando vuoi calcolare qualcosa (differenza tra 2 date, ottenere la data di ieri dalla data corrente, ottenere 1 settimana fa dalla data corrente, ottenere la data di domani o qualcosa del genere.) Non è molto difficile ma di solito dovrai convertirli in timestamp e poi fare le cose. E sì datetime corrente, ad esempio, con: $current = date("Y-m-d"); o $current = date("Y-m-d H:i:s"); se vuoi anche ore, minuti e secondi.

Il timestamp è solo un numero di 11 cifre che in realtà non significa "nulla". Quando lo guardi non saprai quale data rappresenta. Quindi non è davvero facile da usare e non puoi usarlo per farlo solo e mostrarlo ai tuoi visitatori, ad esempio. Dovrai "trasformarlo" in qualcosa di leggibile. Ma ti offre anche la possibilità di convertirlo facilmente e di calcolare date diverse. Ad esempio, se desideri ottenere il timestamp per domani allo stesso tempo, aggiungi solo il numero di secondi alla data corrente e il timestamp di domani. Esempio: $tomorrow = time()+24*3600; Puoi anche ottenere facilmente una differenza tra due date in secondi o qualcosa del genere.

Quindi suggerirei di usare sia datetime che timestamp. Anche se utilizzi ad esempio PhpMyadmin e desideri esaminare rapidamente alcuni dati, sarà più facile per te quando vedrai una data nel formato data / ora (esempio: 2011-12-20 10:15:20 ) come sarà se guardi solo il numero di 11 cifre. Quindi usa entrambi e poi chiama e usa quello che fa per te.

Se devi o vuoi sceglierne solo uno suggerirei di utilizzare il timestamp altrimenti utilizzali entrambi.

    
risposta data 21.12.2011 - 15:08
fonte

Leggi altre domande sui tag