导出mysql db时,mysql表中的日期值发生变化

时间:2013-05-17 07:09:01

标签: mysql database timestamp export

我正在导出mysql表来实时设置它,但在导出数据库时我注意到我的日期列值正在改变 ..如果它是“ 2007-06-11 00: 00:00 “早些时候出口后现在更改为” 2007-06-10 18:30:00 “,

为什么会这样?
有人对此有所了解吗?

2 个答案:

答案 0 :(得分:4)

在5.0.15之前的MySQL版本中存在

Bug #13052,其中转储文件在服务器的时区中表示TIMESTAMP列,但未包含SET TIME_ZONE命令以确保任何人(或任何后续服务器)读取转储文件都明白了;如果没有这样的命令,接收服务器会假定任何TIMESTAMP值都在其默认时区内。

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

这个问题的解决方案有一些模糊的优先顺序,包括:

  1. 将原始服务器上的mysqldump版本升级到5.0.15或更高版本(将导致转储文件表示UTC中的所有TIMESTAMP值,并在开始时使用合适的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'
                       );
    
  4. 如果使用解决方案2或解决方案3,请注意使用相关服务器的time_zone变量的完全时区,以便包含任何夏令时。但请注意,如MySQL Server Time Zone Support中所述:“仅当已创建并填充mysql数据库中的时区信息表时,才能使用命名时区。”文章继续解释如何创建和填充时区信息表。

答案 1 :(得分:2)

在导出数据库之前,只需按照以下步骤操作:

  

使用自定义选项导出

     

取消选中下面的复选框

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

显示在下图中 enter image description here