SET time_zone ustawia strefę czasową dla aktywnej sesji, nie dla serwera.
Żeby sprawdzić strefę czasową serwera wydaj polecenie
SELECT @@global.time_zone;
Co pokazuje? "SYSTEM"? Takie jest domyślne ustawienie - strefa czasowa serwera MySQL taka sama jak strefa czasowa systemu operacyjnego.
Można to zmienić albo edytując plik konfiguracji
my.cnf dodając do niego (w sekcji
[mysqld]) taką linię:
Kod
default-time-zone = '+01:00'
albo z wiersza poleceń, komendą:
SET GLOBAL time_zone = '+01:00';
(przy czym to się chyba nie zachowa po restarcie serwera MySQL)
albo jako opcję procesu w trakcie uruchamiania:
Kod
--default-time-zone='+01:00'
Więcej informacji:
MySQL Server Time Zone Support.
Nie polecałbym Ci dodawania interwałów do znaczników czasu podczas uaktualniania czy dodawania rekordów. To może naruszyć spójność całej bazy danych: w jednym miejscu dodasz, w innym nie i się dziwne anomalie pojawią. Wpisując i uaktualniając daty najlepiej używać funkcji
NOW() - wtedy całość jest spójna. A jeśli chcesz uwzględniać strefę czasową użytkowników aplikacji to dodajesz offsety (czy to w komendach MySQL czy z poziomu PHP) dopiero wyświetlając im daty.