簡體   English   中英

mysql CONVERT_TZ行為不一致

[英]mysql CONVERT_TZ inconsistent behavior

以下行為使我感到困惑。 我的mysql服務器安裝在具有EEST時區的PC上。 我想將mysql中的datetime轉換為UTC日期。

執行時

select CONVERT_TZ('1970-01-01 02:00:01', 'SYSTEM', '+00:00')

響應為:“ 1970-01-01 00:00:01”

同樣,執行時

select CONVERT_TZ('1970-01-01 04:00:00', 'SYSTEM', '+00:00')

響應為:“ 1970-01-01 02:00:00”

但是,當我基本上想要0 Unix時間時,可以執行以下命令:

select CONVERT_TZ('1970-01-01 02:00:00', 'SYSTEM', '+00:00')

響應再次是:“ 1970-01-01 02:00:00”

這是為什么? 難道我做錯了什么? 如何獲取正確的值“ 1970-01-01 00:00:00”?

我認為這里的問題是,在CONVERT_TZ中進行的調整將導致在UNIX紀元開始之前或之前的時間戳記被忽略,並且將返回原始輸入時間戳記。 考慮以下三個查詢:

SELECT CONVERT_TZ('1970-01-01 01:00:01', 'SYSTEM', '+00:00');
-- '1970-01-01 00:00:01'
SELECT CONVERT_TZ('1970-01-01 01:00:00', 'SYSTEM', '+00:00');
-- '1970-01-01 01:00:00'
SELECT CONVERT_TZ('1970-01-01 00:30:00', 'SYSTEM', '+00:00');
-- '1970-01-01 00:30:00'

只有第一個查詢會調整時間戳; 后兩個僅返回輸入。

從上面@Thomas給出的出色評論中,我從MySQL 文檔中獲取了CONVERT_TZ的以下內容:

從from_tz轉換為UTC時,如果該值超出TIMESTAMP類型的支持范圍,則不會進行轉換。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM