2013-05-17 102 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