2016-04-18 7 views
0

Wir haben ein DB-Schema, das viele Datetime-Felder in vielen Tabellen enthält, deren Daten in der lokalen Zeitzone gespeichert sind. Nun müssen alle diese Werte in UTC konvertiert werden.MySql-Skript zum Konvertieren aller DB-Datetime-Felder von einer bestimmten Zeitzone in UTC

Ich versuche, ein Skript zu machen, das alle diese Werte findet und aktualisiert.

So etwas wie ein automatischer Update-Befehl.

Gibt es einen schnellen und sicheren Weg?

Was ich bisher:

1) Ein Weg, alle diese Felder aus meiner db

SELECT table_name, COLUMN_NAME, COLUMN_TYPE 
FROM information_schema.COLUMNS 
WHERE table_schema = 'my_db' AND COLUMN_TYPE='datetime'; 

2) Eine Art und Weise zu aktualisieren, um alle Daten

UPDATE my_table SET my_column = CONVERT_TZ(my_column, 'EST', 'UTC'); 

Antwort

0

CONVERT_TZ zu erhalten ist der schnellste und einfachste Weg, zwischen den Zeitzonen AFAIK zu konvertieren.

+0

Vielen Dank für Ihre Antwort ... doch, was ich brauche ist ein Do-it-all-Skript (Ausführungszeit lang usw. sein kann)! eine, mit der die Tabellen konvertiert werden, die aktuelle Zeitzone abgerufen, die Aktualisierungsbefehle generiert und ausgeführt werden ... Ich weiß, ich könnte vielleicht zu viel verlangen ...: - / – cnom

0

Die Art, wie ich schließlich arbeitete-drum herum war ein Befehl zu erstellen, dass erzeugt alle das Update mit String-Verkettung-Befehle ...

Dies ist, was ich zunächst auf information_schema ausgeführt:

SELECT concat('UPDATE ', table_schema,'.',table_name,' SET ',column_name,' = CONVERT_TZ(',column_name,',\'+03:00\',\'+00:00\');') 
FROM information_schema.COLUMNS 
Where table_schema = 'mydb' AND COLUMN_TYPE='datetime'; 
Diese

gab mir eine Reihe von Befehlen wie:

UPDATE mydb.table1 SET OccuredOn = CONVERT_TZ(OccuredOn,'+03:00','+00:00'); 
UPDATE mydb.table1 SET CreatedOn = CONVERT_TZ(CreatedOn,'+03:00','+00:00'); 
UPDATE mydb.table2 SET LastUpdatedOn = CONVERT_TZ(LastUpdatedOn,'+03:00','+00:00'); 

(... und viele mehr)

... die zur Ausführung bereit waren und in etwa 5 Sekunden das gewünschte Ergebnis haben.

Offensichtlich ist dies nicht der optimierte Weg, um es zu tun, aber ich hatte die Freiheit, es zu tun, da die DB noch kurz in Daten ist (einige Zehntausende Datensätze in etwa 30 Tabellen).

Unnötig Sie zu sagen haben, mit Vorsicht in großen DBs verwenden