Mysqldump時區差問題

2021-09-29 06:14:42 字數 1923 閱讀 9936

問題場景

我們要從資料庫a中匯出test表裡create_pub_time在2019-10-30的0點到4點的資料到資料庫b中的test表裡,其中兩個庫里的test表表結構完全一致,create_pub_time欄位型別為timestamp。

首先,匯出sql檔案。在伺服器上執行以下命令:

mysqldump -h主機名 -u使用者名稱 -p密碼 -p3306 --default-character=utf8 -t a test --where="create_pub_time>='2019-10-30 00:00:00' and create_pub_time< '2019-10-30 04:00:00' "

--replace > '/data/test/test.sql'

;

得到test.sql檔案後,再將檔案匯入到資料庫b中。在伺服器上執行以下命令(或者,在mysql客戶端直接執行test.sql檔案):

mysql -h主機名 -u使用者名稱 -p密碼 -p3306 --default-character=utf8 -t b < '/data/test/test.sql'

;

我們發現,資料庫b的test表裡匯入的資料並不是create_pub_time在0點到4點的資料,而是8點到12點的資料。

原因參考連線:

在匯出時,如果沒有加其他選項,在我們的匯出檔案中有這樣幾行:

….

/*!40103 set @old_time_zone=@@time_zone */;

/*!40103 set time_zone='+00:00'*/

;….

也就是說,在匯出時,首先會將時區time_zone設定為』+00:00』,而time_zone這個值在資料庫中預設是什麼呢

是系統預設時區,檢視系統預設時區:

在匯出資料時,時間會先做轉換,在原來的時間基礎上減去8h,然後再根據create_pub_time>=『2019-10-30 00:00:00』 and create_pub_time< '2019-10-30 04:00:00』條件進行過濾,所以,我們實際得到的是8點到12點的資料。

解決辦法

mysqldump -h主機名 -u使用者名稱 -p密碼 -p3306 --default-character=utf8 -t 資料庫名 test --where="time>='2019-10-30 02:00:00' and time< '2019-10-30 04:00:00' "

--skip-tz-utc --replace > '/data/test/test.sql'

;

先將需要匯出的庫的時區進行設定

set time_zone='+00:00'

;匯出結束後再恢復:

set time_zone='system'

;

拓展1. 檢視mysql時間相關命令

檢視mysql時區

mysql>

show variables like

'%time_zone%'

;

variable_name

value

system_time_zone

csttime_zone

system

檢視mysql當前時間

mysql>

select

now(

);

2. 檢視系統預設時區時區

date -r
上面命令輸出了+0800表示東八區,也就是我們國家的時間。

3. 關於時間的幾個標準

C MongoDB 時區問題 差了8小時

原因1 mongodb自帶的date是utc的時間,中國是東八區,所以差了8個小時。解決方法 在mongodb視覺化工具robomongo中,我們可以通過 options display dates in local timezone 來設定顯示本地時間。原因2 mongodb中儲存的時間是標準時間...

NSDateFormatter時區問題

使用nsdateformatter轉換時間字串時,預設的時區是系統時區,如我們使用一般都是北京時間 8 如果直接使用 cpp view plain copy print?dateformatter datefromstring 2012 01 01 00 00 00 你會發現實際轉換為2011 12...

mysql時區問題

一 問題描述 從mysql中取時間欄位時結果會相差14或8個小時 解決方案 在mysql連線字串後加上servertimezone gmt 2b8,表示使用gmt 8北京時間 jdbc mysql ip 3306 seckiluseunicode true characterencoding utf...