2017-06-13 2 views
0

Ich habe ein PHP-Skript, das die Zeitzone für die MySQL-Sitzung einstellt. Ich habe die Ausgabe überprüft und es sendet den Offset korrekt, +1:00 (Europa/London in DST). Wenn ich jedoch den Zeitstempel lese, der in der Datenbank gespeichert wurde, sind es acht Stunden. Warum passiert dies?SQL ist 8 Stunden hinter der von PHP gesetzten Zeitzone

Der MySQL-Server legt den Zeitstempel als Standardwert fest.

+1

Der "Standardwert" ist der Wert des Servers. Wie ist die Zeitzone auf dem Server eingestellt? (Verwenden Sie 'date' in der Befehlszeile, es sollte die Zeitzone anzeigen) – aynber

+0

@aynber Ich kann nicht auf die Befehlszeile zugreifen, da dies ein freigegebener Server ist. – StellarDoor5319

Antwort

1

Aktualisieren Sie Ihre Datenbank-Parameter:

SET GLOBAL time_zone = 'Europe/London'; 
// OR: SET time_zone = 'Europe/London'; 
// OR: SET @@session.time_zone = 'Europe/London'; 

Update-Zeitzone direkt in der Anfrage:

SELECT ..., CONVERT_TZ(field, 'GMT', 'Europe/London') FROM ... 

in der Eingabedatei definieren (wie index.php) die richtige Zeitzone:

date_default_timezone_set('Europe/London'); 

Zusätzlich kann es auf Server (Beispiel, Ubuntu) getan werden:

+0

Da ich auf einem freigegebenen Server bin, habe ich nicht die richtigen Berechtigungen, 'GLOBAL' zu verwenden. Ich führe jedoch bereits den ersten Befehl ohne 'GLOBAL' aus - aber ich übergebe den Wert' +1: 00'. – StellarDoor5319

+0

@ StellarDoor5319 In diesem Fall könnten Sie den Parameter direkt für Ihr Konto ändern (entfernen Sie 'GLOBAL'). Auch alle Werte aus der Datenbank können konvertiert werden: 'CONVERT_TZ (field, 'GMT', 'Europe/London')' – FieryCat

+0

Ich habe die Antwort aktualisiert;) – FieryCat

1

MySQL-Referenz timezone mentioned on their website, zeigt Ihnen, wie Sie es einstellen.

Für die Faulen

mysql> SET time_zone = Zeitzone;

+0

Mein PHP-Skript führt diesen Befehl bereits als Teil einer Anweisung 'multi_query()' aus. Die MySQL-Einfügung läuft direkt danach. – StellarDoor5319