2013-05-17 108 views
6

我导出mysql表进行实时设置,但在导出数据库时,我发现我的日期列值正在变化 ..如果是“2007-06- 11 00:00:00“之前导出后现在改为”2007-06-10 18:30:00“,在导出mysql数据库时,mysql表中的日期值发生了变化db

为什么这样呢?
有人有想法吗?

+0

是数据类型是'timestamp',I我看到导出文件以及新服务器上的更改,我通过phpmyadmin - >导出选项卡导出数据,mysql版本为5.0。8 – ashish

+0

有什么方法可以纠正仅在那里的新服务器上加载的数据? – ashish

回答

4

Bug #13052之前5.0.15中存在的MySQL版本,其中转储文件表示在服务器的时区TIMESTAMP列,但并不包括SET TIME_ZONE命令,以确保任何人(或任何后续的服务器)读取转储文件明白;如果没有这样的命令,接收服务器会假定任何TIMESTAMP值都处于其默认时区。

因此,服务器之间的时间偏移18:30(例如从南澳大利亚到加利福尼亚)之间的转移将导致您观察到的行为。

解决这个问题,在偏好的一些模糊的顺序,包括:

  1. 升级的mysqldump的原始服务器上的版本5.0.15或更高版本(将导致转储文件中表达的所有TIMESTAMP值以UTC表示,在开始时有合适的SET TIME_ZONE声明);

  2. 此前出口(或进口),更改源(或目标)服务器上的全球time_zone变量,因此,它在进口(或出口)的时间在其他服务器上的设置相匹配:

    SET GLOBAL time_zone = 'America/Los_Angeles'; -- ('Australia/Adelaide') 
    
  3. UPDATE事实后的数据,应用MySQL的CONVERT_TZ()功能:

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

如果全光照无论是解决方案2还是解决方案3,都要谨慎使用相关服务器的变量的时区,以便包括任何夏时制时间。但是请注意,如MySQL Server Time Zone Support所述:“只有在创建并填充了mysql数据库中的时区信息表时,才能使用命名时区”本文继续介绍如何创建和填充时区信息表。

+0

有没有什么方法可以纠正上载的服务器上的数据? – ashish

+0

@ashish:我不是已经回答了吗? – eggyal

+0

是的,它为我工作。 – ashish

2

导出数据库之前,只要按照下面的步骤:

自定义选项

出口取消选中该复选框下面

Dump TIMESTAMP columns in UTC (enables TIMESTAMP columns to be dumped and reloaded between servers in different time zones) 

显示在下面的图像 enter image description here