7

我正在导出 mysql 表以实时设置它,但是在导出 DB 时,我注意到我的日期列值正在发生变化.. 如果之前是“ 2007-06-11 00:00:00 ”,那么在导出后它现在更改为" 2007-06-10 18:30:00 ",

为什么会这样?
有人对此有想法吗?

4

2 回答 2

4

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

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

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

  1. 将原服务器上的mysqldump版本升级到5.0.15或更高版本(将导致dumpfile以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'
                       );
    

如果使用解决方案 2 或解决方案 3,请注意使用相关服务器变量的确切time_zone时区,以包括任何夏令时。但是,请注意,如MySQL 服务器时区支持中所述:“仅当 mysql 数据库中的时区信息表已创建并填充时,才能使用命名时区。 ”文章继续解释如何创建和填充时区信息表。

于 2013-05-17T07:43:45.873 回答
3

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

使用自定义选项导出

取消选中下面的复选框

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

如下图所示 在此处输入图像描述

于 2017-10-10T19:40:53.930 回答