Znacznik czasu unix epoki (2014-04-09) to 1397071518. Potrzebny jest więc typ danych, który będzie w stanie zapisać liczbę przynajmniej tak dużą.
Jakie typy danych są dostępne?
Jeśli odnieść się do PostgreSQL documentation on numeric types znajdziesz następujące opcje:
Name Size Minimum Maximum
smallint 2 bytes -32768 +32767
integer 4 bytes -2147483648 +2147483647
bigint 8 bytes -9223372036854775808 +9223372036854775807
Co to znaczy jeśli chodzi o reprezentację czasu?
Teraz możemy wziąć te numery i przekształcania ich w terminach przy użyciu 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
Zauważ, że w ostatniej instancji, stosując sekund stawia się tak daleko w przeszłość i przyszłość, że prawdopodobnie nie ma znaczenia. Rezultat, który podałem jest dla reprezentacji epoki unixowej w milisekundach.
Czego się nauczyliśmy?
smallint
to zdecydowanie zły wybór.
integer
to przyzwoity wybór w tej chwili, ale twoje oprogramowanie będzie wybuchać w roku 2038. Apokalipsa Y2K nie ma nic na Year 2038 Problem.
- Korzystanie z
bigint
jest najlepszym wyborem. Jest to rozwiązanie przyszłościowe wbrew najbardziej prawdopodobnym potrzebom ludzkim, choć może ono być jeszcze: the Doctor.
Możesz, ale nie musisz zastanowić się, czy nie warto przechowywać datownika w innym formacie, takim jak standard ISO 8601.
Myślę, że mogę temu zaradzić za pomocą czeku, aby zachowywał się jak niepodpisany numer. – ThinkingMonkey
do 2038 to nie jest problem :) – CyberDem0n
prawdopodobnie użyje wtedy biginta. Ale nie byłoby dobrze przechowywać dodatkowe bity. – ThinkingMonkey