sql >> Databasteknik >  >> RDS >> PostgreSQL

Vilken är en lämplig datatyp för att lagra en tidszon?

Tyvärr erbjuder PostgreSQL ingen tidszonsdatatyp, så du bör förmodligen använda text .

interval verkar vara ett logiskt alternativ vid första anblicken, och det är lämplig för vissa användningsområden. Den tar dock inte hänsyn till sommartid och tar inte heller hänsyn till det faktum att olika regioner i samma UTC-offset har olika sommartidsregler.

Det finns ingen 1:1-mappning från UTC-förskjutning tillbaka till tidszon.

Till exempel tidszonen för Australia/Sydney (New South Wales) är UTC+10 (EST ), eller UTC+11 (EDT ) under sommartid. Ja, det är samma akronym EST som USA använder; tidszonsakronymer är icke-unika i tzdata-databasen, vilket är anledningen till att Pg har timezone_abbreviations miljö. Ännu värre, Brisbane (Queensland) har nästan samma longitud och ligger i UTC+10 EST ... men har inte sommartid, så någon gång är den på -1 offset till New South Wales under NSW:s sommartid.

(Uppdatera :Mer nyligen antog Australien en A prefix, så den använder AEST som dess öststater TZ akronym, men EST och WST förbli i allmänt bruk).

Förvirrar du mycket?

Om allt du behöver lagra är en UTC-offset sedan ett interval är passande. Om du vill lagra en tidszon , lagra den som text . Det är jobbigt att validera och konvertera till en tidszonförskjutning för tillfället, men det klarar åtminstone sommartid.



  1. Sluta att MySQL tolererar flera NULLs i en UNIK begränsning

  2. Förstå Big Data Analytics

  3. PDO skickar rå fråga till MySQL medan Mysqli skickar förberedd fråga, båda ger samma resultat

  4. Hur man undviker detta PDO-undantag:Kan inte köra frågor medan andra obuffrade frågor är aktiva