Il timestamp unix epoch in questo momento (2014-04-09) è 1397071518. Quindi abbiamo bisogno di un tipo di dati in grado di memorizzare un numero almeno così grande.
Quali tipi di dati sono disponibili?
Se si fa riferimento alla PostgreSQL documentation on numeric types troverete le seguenti opzioni:
Name Size Minimum Maximum
smallint 2 bytes -32768 +32767
integer 4 bytes -2147483648 +2147483647
bigint 8 bytes -9223372036854775808 +9223372036854775807
Che cosa significa questo in termini di rappresentanza tempo?
Ora, possiamo prendere questi numeri e li converte in date utilizzando un epoch converter:
Name Size Minimum Date Maximum Date
smallint 2 bytes 1969-12-31 1970-01-01
integer 4 bytes 1901-12-13 2038-01-18
bigint 8 bytes -292275055-05-16 292278994-08-17
Si noti che in ultima istanza, si utilizza secondi mette così lontano nel passato e il futuro che probabilmente non importa. Il risultato che ho dato è se rappresenti l'epoca unix in millisecondi.
Quindi, cosa abbiamo imparato?
smallint
è chiaramente una cattiva scelta.
integer
è una scelta decente per il momento, ma il tuo software esploderà nell'anno 2038. L'apocalisse Y2K non ha nulla sul Year 2038 Problem.
- Utilizzare
bigint
è la scelta migliore. Questo è a prova di futuro contro i bisogni umani più concepibili, anche se the Doctor può ancora criticise esso.
Si può o non si può considerare se potrebbe non essere il migliore per memorizzare il timestamp in un altro formato come lo standard ISO 8601.
Penso di poterlo contrastare con un assegno per farlo comportare come un numero senza segno. – ThinkingMonkey
fino al 2038 questo non è un problema :) – CyberDem0n
probabilmente userò bigint allora. Ma non sarebbe bello conservare i bit in più. – ThinkingMonkey