MYSQL数据导入更改时间

时间:2014-07-13 19:03:35

标签: mysql

我在使用MYSQL时出现问题。现在,我通过mysqldump转储数据,如下:

mysqldump -uuser -ppass --tab c:/temp --skip-dump-date dbName

这完全按预期工作,数据库中的数据与生成的.txt文件匹配。问题在于导入数据。为了解决导入阶段的一些外键问题,我使用以下代码:

SET FOREIGN_KEY_CHECKS = 0;
LOAD DATA LOCAL INFILE 'c:/temp/tableName.txt' INTO TABLE tableName;
SET FOREIGN_KEY_CHECKS = 1;

这也没有问题,除了我检查数据库之后,所有TIMESTAMP都向前移动了5个小时。我知道这必须是时区的问题(我在UTC-05:00,所以转换时间是有道理的),但我不明白应该做些什么来阻止数据库假设需要做出时间的转变。

在我寻找答案时,我遇到了类似的SO问题,但问题是倒退了。进口很好,出口转移了。 MySQL data export changes times

此外,我已经看到了一些在MYSQL中查看此信息的建议,但我现在还不知道我应该如何处理这些信息。

SELECT @@global.time_zone, @@session.time_zone;

给我:

SYSTEM    +00:00

有没有办法告诉MYSQL导入而不改变TIMESTAMP?我应该更改某种时区设置吗?如果是这样,我应该更改它以进行导入还是导出?我没有计划在任何时区移动数据库。

更新1

在我知道最佳实践的同时,我在使用LOAD DATA命令块之前直接尝试了以下更改:

SET TIME_ZONE = '+00:00';

这解决了我的问题(我希望我的转储与我用来创建数据库的文件相同)。之后,我将时间更改回-05:00,但我不确定是否有必要。

1 个答案:

答案 0 :(得分:2)

使用--tz-utc选项`mysqldump。来自documentatin:

  

此选项允许在不同时区的服务器之间转储和重新加载TIMESTAMP列。 mysqldump设置其连接              时区到UTC并添加SET TIME_ZONE =' +00:00'到转储文件。如果没有此选项,则会转储并重新加载TIMESTAMP列              源服务器和目标服务器本地的时区,如果服务器处于不同的时间,则可能导致值发生更改              区域。 --tz-utc还可以防止因夏令时而导致的变化。 - 默认情况下启用--tz-utc。要禁用它,请使用              --skip-TZ-UTC。