2010-03-28 13 views
19

Probabilmente molti programmatori vogliono fare questa domanda. è What's the adventages di ognuno di quei formati temporali MySQL. e quale preferirai usarlo nelle tue app.MySQL: Qual è il migliore da usare, Unix TimeStamp o DATETIME

per me usare timestamp Unix perché forse trovo facile convertire record & ordine con esso, e anche perché non ho mai provato la cosa DATETIME. ma comunque sono pronto a cambiare idea se qualcuno mi dice che ho torto.

Grazie

+0

Simili: http://stackoverflow.com/questions/409286/datetime-vs-timestamp –

risposta

16

Timestamp (sia quelli PHP e quelli di MySQL) sono immagazzinate utilizzando 32 bit (cioè 4 byte) interi; il che significa che sono limitati a un intervallo di date che va dal 1970 al 2038.

DATETIME non hanno questa limitazione - ma sono memorizzati utilizzando più byte (8 byte, se non mi sbaglio)


Dopo, tra memorizzazione timestamp come visto da PHP, o timestamp come visto da MySQL:


E, per maggiori informazioni tra di MySQL TIMESTAMP e DATETIME tipi di dati, vedere 10.3.1. The DATETIME, DATE, and TIMESTAMP Types

+3

Sono limitati _ora_ a 32 bit :) –

+4

Chi utilizza i sistemi a 32 bit nel 2038? –

+0

'new java.util.Date(). GetTime()' è già 64 bit. – osa

1

A meno che la digitalizzazione di record prima del 1 gennaio 1970, Mi piace l'epoca UNIX. È solo una questione di preferenza, i numeri interi senza segno sono più semplici da affrontare quando si utilizzano più lingue.

Basta tenere a mente, l'epoca inizia il 1 gennaio 1970. Molte aziende erano in attività da decenni, se non di più, prima di quello.

+0

I timestamp Unix, con un numero intero a 32 bit con segno, possono memorizzare le date fino al 1901, poiché possono estendersi da -2147483647 (13 dicembre 1901 8:45:53 PM UTC) a 2147483647 (19 gennaio 2038 3:14:07 UTC) –

9

Come altri hanno già detto, i timestamp possono rappresentare un intervallo più piccolo di datetimes (dal 1970 al 2038). Tuttavia, i timestamp misurano il numero di secondi da Unix Epoch (1970-01-01 00:00:00 UTC), rendendoli quindi indipendenti dal fuso orario, mentre DATETIME memorizza una data e un'ora senza fuso orario. In altre parole, i timestamp fanno riferimento in modo univoco a un particolare punto temporale, mentre il punto esatto nel tempo a cui si riferisce DATETIME richiede un fuso orario (che non è memorizzato in un campo DATETIME). Per capire perché questo può avere importanza, considera cosa succede se cambiamo il nostro fuso orario.

Supponiamo di voler memorizzare il datetime 2010-03-27 12:00 UTC. Se lo memorizziamo e lo recuperiamo utilizzando un timestamp o DATETIME, in genere non sembra esserci differenza. Tuttavia, se il server ora cambia in modo che il fuso orario locale sia UTC + 01, otteniamo due risultati diversi se estraiamo il datetime.

Se avessimo impostato il campo su DATETIME, esso segnalerebbe il datetime come 2010-03-27 12:00, nonostante la modifica del fuso orario. Se avessimo impostato il campo su un timestamp, la data sarebbe stata segnalata come 2010-03-27 11:00. Questo non è un problema con entrambi i tipi di dati - è solo il risultato del fatto che essi memorizzano informazioni leggermente diverse.

+0

I timestamp Unix, con un numero intero a 32 bit con segno, possono memorizzare le date fino al 1901, poiché possono estendersi da -2147483647 (13 dicembre 1901 8:45:53 PM UTC) a 2147483647 (19 gennaio 2038 3:14:07 UTC) –

2

Questo dipende molto.Ti darò 2 esempi dove uno sopraffatto l'altro:

La data/ora è migliore di DATETIME quando si desidera archiviare la sessione degli utenti nel database e il tempo di creazione della sessione (in formato Timestamp) viene utilizzato per il recupero veloce delle righe (con indice).
E.g. tabella potrebbe essere simile a questa:
[session_create_time AS Timestamp][IP_address AS 32bit Int][etc...]
Avere un indice sulle prime due colonne può davvero velocizzare le vostre domande. Se disponi di un tipo di valore DATETIME per il campo session_create_time, potrebbe essere necessario molto più tempo. Tieni conto che le query di sessione vengono eseguite ogni volta che un utente richiede una pagina, quindi l'efficienza è fondamentale.

DATETIME è migliore di Timestamp quando si desidera memorizzare la data di nascita di un utente o alcuni eventi storici che richiedono un intervallo di tempo flessibile.

+0

I timestamp di Unix, con un numero intero a 32 bit con segno, possono memorizzare le date fino al 1901, poiché possono estendersi da -2147483647 (13 dicembre, 1901 8:45:53 UTC) a 2147483647 (19 gennaio 2038 3:14:07 UTC). Quindi, a meno che non stiate memorizzando una data prima del 1901, un timestamp funzionerebbe. –

Problemi correlati