Timezones v MySQL
Nekoč davno sem se potreboval na isti MySQL strežnik povezovati iz različnih časovnih pasov. Verjetno je bilo to še v verziji 3 in nekaj, po besnem prebiranju dokumentacije sem obupal, ne da se.
Pa sem pred kratkim spet prišel do tega problema, se zdaj da? Seveda, že nekaj časa, če prav razumem, od verzije 4.1.3 naprej. Nerodno je sicer, da se vse skupaj pozna le na funkcijah NOW() in CURTIME() ter vrednostih, ki so shranjene v poljih tipa TIMESTAMP, pa vseeno. Če v eno tabelo vedno pišem le iz enega časovnega pasu, ne bo večjih problemov.
Rešitev je povsem enostavna, izvedemo le naslednje:
Namesto timezone
seveda vpišemo izbrani časovni pas, lahko v formatu +1:00
, -10:00
ali pa v opisnem, recimo CET
, Europe/Ljubljana
in podobno. Za uporabo slednjih je potrebno še populirati tabele, ki so v podatkovni bazi z imenom mysql
sicer že pripravljene, ampak žal prazne. To storimo iz shella, takole:
Gornja zadeva prebere sistemske nastavitve iz direktorija /usr/share/zoneinfo
in jih shrani v ustrezne MySQLove sistemske tabele.
Napisano ni noben trik ali hack in več o tem lahko preberete tudi v navodilih, zdelo se mi je le vredno opozoriti na ta MySQLov feature, za katerega doslej pač nisem vedel iz preprostega razloga, nisem ga potreboval. Mogoče ga pa kdo od vas potrebuje, pa ne ve zanj in je pač le prelen, da bi bral dokumentacijo :)