sql >> Databáze >  >> RDS >> PostgreSQL

Jaký je vhodný datový typ pro uložení časového pásma?

Bohužel PostgreSQL nenabízí datový typ časového pásma, takže byste pravděpodobně měli použít text .

interval na první pohled vypadá jako logická možnost a je vhodné pro některá použití. Nezohledňuje však letní čas ani skutečnost, že různé oblasti ve stejném offsetu UTC mají různá pravidla DST.

Neexistuje mapování 1:1 z offsetu UTC zpět do časového pásma.

Například časové pásmo pro Australia/Sydney (New South Wales) je UTC+10 (EST ), nebo UTC+11 (EDT ) během letního času. Ano, to je stejná zkratka EST které USA používají; Zkratky časových pásem nejsou v databázi tzdata jedinečné, a proto má Pg timezone_abbreviations nastavení. Horší je, že Brisbane (Queensland) je na téměř stejné zeměpisné délce a je v UTC+10 EST ... ale nemá letní čas, takže někdy je na -1 offset to New South Wales během NSW's DST.

(Aktualizovat :Nedávno Austrálie přijala A prefix, takže používá AEST jako jeho východní státy zkratka TZ, ale EST a WST zůstávají běžně používány).

Hodně matoucí?

Pokud vše, co potřebujete uložit, je offset UTC pak interval je vhodné. Pokud chcete uložit časové pásmo , uložte jej jako text . V tuto chvíli je těžké ověřovat a převádět na posun časového pásma, ale alespoň si poradí s DST.



  1. Nelze získat json z mysql varchar, ale int

  2. Seznam značek SQL a filtrování značek

  3. Jak vyvolat výjimku uvnitř spouštěče? Existuje způsob, jak to udělat?

  4. Java - JDBC executeUpdate() nefunguje