【问题标题】:The dates changed after MySQL database get imported导入 MySQL 数据库后更改的日期
【发布时间】:2017-03-17 02:26:42
【问题描述】:

我刚刚从我们的旧服务器导出了一个 MySQL 数据库,使用:

mysqldump -u [uname] -p[pass] db_name > db_backup.sql

然后我使用 phpMyAdmin 将数据库文件 db_backup.sql 导入我们的新服务器:

PhpMyAdmin->Import->File to Import

新数据库表中的日期不同。为什么它们发生了变化,我该如何阻止这种情况?

以下是旧数据库日期:

这里是新的数据库日期,为什么它们会改变?

【问题讨论】:

  • 服务器位于不同的时区,似乎相隔 6 小时。
  • SET TIME_ZONE = '+00:00';
  • @vanloc 你的意思是在我的新服务器 phpMyAdmin 中这样做吗?
  • 导出数据库时你的time_zone?我认为您应该在导入数据而不是导出时将时区设置为 UTC。从“--tz-utc”选项的文档中:“mysqldump 将其连接时区设置为 UTC,并将 SET TIME_ZONE='+00:00' 添加到转储文件中。”所以,转储是 UTC 格式的。但由于您使用选项卡转储,“SET TIME_ZONE='+00:00”指令不会执行,因此您必须手动设置连接上的时区。命令:set time_zone=@old_time_zone。您的服务器有 time_zone 与您所在的位置不同。

标签: mysql phpmyadmin


【解决方案1】:

解决方案 1:

--skip-tz-utc 选项添加到导出脚本。

解决方案 2:

我认为您应该在导入数据而不是导出时将时区设置为 UTC。

来自--tz-utc选项的文档:

"mysqldump 将其连接时区设置为 UTC 并添加 SET TIME_ZONE='+00:00' 到转储文件。”因此,转储采用 UTC 格式。 但由于您使用选项卡转储,“SET TIME_ZONE='+00:00”指令是 未执行,因此您必须在连接上设置时区 手动。

命令:set time_zone=@old_time_zone

【讨论】:

    【解决方案2】:

    我不能 100% 确定,但也许您在每台服务器上设置了不同的时间。我看到只有几天和几小时发生了变化,所以看起来像 18 小时。看看吧。

    更改服务器上的全局 time_zone 变量: SET GLOBAL time_zone = 'America/Los_Angeles';

    事后更新数据,应用 MySQL 的 CONVERT_TZ() 函数:

    UPDATE my_table
    SET    my_column = CONVERT_TZ(
                         my_column,
                         'America/Los_Angeles',
                         'Australia/Adelaide'
                       ); 
    

    【讨论】:

    • 有没有办法让 phpMyAdmin 忽略这个?
    猜你喜欢
    • 1970-01-01
    • 2013-12-01
    • 1970-01-01
    • 2019-09-15
    • 1970-01-01
    • 2014-05-04
    • 1970-01-01
    • 2016-01-13
    • 2016-11-04
    相关资源
    最近更新 更多