2013-04-05 16 views
14

Pozwól mi wyjaśnić: Nie pytam o właściwy sposób przechowywania określonego strefy czasowej określonego datetime w bazie danych. Mówię o strefach czasowych. NA PRZYKŁAD:Właściwy sposób przechowywania strefy czasowej w bazie danych?

Mam tabelę MySQL o nazwie "użytkownicy". Teraz, w tej tabeli, chcę mieć kolumnę, która zawiera strefę czasową miejsca, w którym mieszka użytkownik (jest to udostępnione przez użytkownika, zostanie wybrane z listy). Pracuję w PHP, która ma listę ciągów strefy czasowej, takie jak:

List of TimeZones for America

Teraz oczywiste rozwiązanie (przynajmniej dla mnie) byłoby utworzyć kolumnę VARCHAR w tabeli Users , a następnie zapamiętaj ciąg strefy czasowej używanej przez PHP w tej kolumnie.

Teraz, gdy o tym myślę, zakładam, że zawsze będę używał PHP do interakcji z tą tabelą bazy danych, która, choć jest prawdziwa, może nie być tak w przyszłości. I (popraw mnie jeśli się mylę) Struny stref czasowych PHP prawdopodobnie nie działają dla innych języków programowania, być może inne języki mają własne "stałe" do obsługi strefy czasowej.

Jak podchodzisz do zapisywania preferencji użytkownika w strefie czasowej w kolumnie DB? Wszelkie pomysły są z pewnością doceniane.

Uwaga: przydatne w strefach czasowych PHP jest to, że nawet jeśli DST działa, automatycznie uwzględnia to, co jest niesamowite. Więc widzisz moje zainteresowanie ich użyciem zamiast tylko przechowywać przesunięcie numeryczne.

+0

Możesz zapisać przesunięcie liczbowe w bazie danych i utworzyć plik PHP "config", który odwzorowuje numeryczne przesunięcie z powrotem na łańcuch strefy czasowej PHP. – Passerby

+4

@Passerby - Przesunięcie nie jest strefą czasową. Istnieje wiele stref czasowych, które zmieniają przesunięcia w ciągu roku i wiele stref czasowych, które mają takie same przesunięcia. –

+0

@MattJohnson Możesz przechowywać offset dowolnego formatu, o ile twój program wie, jak "przetłumaczyć" je z powrotem na stałe specyficzne dla danego języka. Zamiast przechowywać "-8" dla całej strefy -8, możesz zapisać "-8.1" dla Kalifornii, "-8.2" dla innego miejsca (nie Amerykanina, więc nie wiem zbyt wiele :)). – Passerby

Odpowiedz

21

I (poprawcie mnie jeśli się mylę) ciągi timezone PHP prawdopodobnie nie pracują dla innych języków programowania

Ok, ja to zrobię. :)

PHP implementuje IANA/Olson/TZDB/ZoneInfo database (wiele nazw dla tego samego). Jest to najbliższe standardowi branżowemu i jest wdrażane niemal we wszystkich językach programowania i platformach.

Jedynym systemem operacyjnym, który nie obsługuje go natywnie, jest system Microsoft Windows, ponieważ firma Microsoft utrzymuje własną bazę danych strefy czasowej. Tak więc w przypadku platform opartych na systemie Windows, takich jak .Net, musisz używać libraries, jeśli potrzebujesz wsparcia dla tego stylu strefy czasowej.

Czytaj więcej w timezone tag wiki lub na Wikipedia.

Tak, tak - przechowujesz ciąg id strefy czasowej jako varchar. To najlepsza rzecz do zrobienia.

+0

Nie wiedziałem o tym, super! Będę przechowywał identyfikatory ciągów stref czasowych jako varchar. Wielkie dzięki! –

Powiązane problemy