MySql脚本将所有DB datetime字段值从特定时区转换为UTC

时间:2016-04-18 08:47:36

标签: mysql datetime timezone

我们有一个数据库架构,在许多表中包含许多日期时间字段,其数据存储在本地时区。 现在所有这些值都需要转换为UTC。

我尝试制作一个可以找到并更新所有这些值的脚本。

类似于自动更新命令。

有没有快速安全的方法?

到目前为止我发现了:

1)从我的数据库中获取所有这些字段的方法

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

2)更新所有数据的方法

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

2 个答案:

答案 0 :(得分:1)

CONVERT_TZ是在时区AFAIK之间进行转换的最快速,最简单的方法。

答案 1 :(得分:0)

我最终解决这个问题的方法是使用字符串连接创建一个生成所有更新命令的命令...

这是我最初在information_schema上执行的内容:

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';

这给了我一组命令,如:

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' );

(......还有更多)

......准备执行并在5秒内获得所需的结果。

显然这不是优化的方法,但我可以自由地做到这一点,因为数据库的数据很短(约30个表中的数万条记录)。

不用说你必须谨慎使用大型数据库(执行时间可能很长等)