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

ash*_*ish 7 mysql database timestamp export

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

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

egg*_*yal 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')
    
    Run Code Online (Sandbox Code Playgroud)
  3. UPDATE事后数据,应用MySQL的CONVERT_TZ()功能:

    UPDATE my_table
    SET    my_column = CONVERT_TZ(
                         my_column,
                         'America/Los_Angeles',
                         'Australia/Adelaide'
                       );
    
    Run Code Online (Sandbox Code Playgroud)

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