我在使用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
,但我不确定是否有必要。
答案 0 :(得分:2)
使用--tz-utc
选项`mysqldump。来自documentatin:
此选项允许在不同时区的服务器之间转储和重新加载TIMESTAMP列。 mysqldump设置其连接 时区到UTC并添加SET TIME_ZONE =' +00:00'到转储文件。如果没有此选项,则会转储并重新加载TIMESTAMP列 源服务器和目标服务器本地的时区,如果服务器处于不同的时间,则可能导致值发生更改 区域。 --tz-utc还可以防止因夏令时而导致的变化。 - 默认情况下启用--tz-utc。要禁用它,请使用 --skip-TZ-UTC。