sql >> Database teknologi >  >> RDS >> PostgreSQL

Hvad er en passende datatype til at gemme en tidszone?

Desværre tilbyder PostgreSQL ikke en tidszonedatatype, så du bør nok bruge text .

interval virker som en logisk mulighed ved første øjekast, og det er egnet til nogle anvendelser. Den tager dog ikke hensyn til sommertid, og den tager heller ikke hensyn til det faktum, at forskellige regioner i samme UTC-offset har forskellige sommertidsregler.

Der er ikke en 1:1-tilknytning fra UTC-forskydning tilbage til tidszonen.

For eksempel tidszonen for Australia/Sydney (New South Wales) er UTC+10 (EST ), eller UTC+11 (EDT ) i sommertid. Ja, det er det samme akronym EST som USA bruger; tidszone akronymer er ikke-unikke i tzdata-databasen, hvorfor Pg har timezone_abbreviations indstilling. Hvad værre er, Brisbane (Queensland) har næsten samme længdegrad og er i UTC+10 EST ... men har ikke sommertid, så nogle gange er det på en -1 offset til New South Wales under NSW's sommertid.

(Opdater :For nylig har Australien vedtaget en A præfiks, så den bruger AEST som dets østlige stater TZ akronym, men EST og WST forblive i almindelig brug).

Forvirrer meget?

Hvis alt du behøver at gemme er en UTC offset derefter et interval er passende. Hvis du vil gemme en tidszone , gem det som text . Det er en smerte at validere og konvertere til en tidszoneforskydning i øjeblikket, men i det mindste klarer det sommertid.



  1. Sådan konverteres mellem datoformater i SQL Server ved hjælp af CAST()

  2. InnoDB-tabeller findes i MySQL, men siger, at de ikke eksisterer efter kopiering af database til ny server

  3. node-postgres får fejlforbindelse ECONNREFUSED

  4. MySQL-strengseparation med kommaoperator