MySQL 5.6.4及以後版本的datetime數據類型按手冊頁Date and Time Data Type Representation中的說明進行保存。簡而言之,它是一個包含小數秒的5字節格式,並與時區信息相分離。
測試表
create table dtTest
(
id int auto_increment primary key,
dt datetime not null
);
insert dtTest (dt) values ('2016-04-27 09:00:00');
如果一個確認這個需要,我們可以跳進保存文件的十六進制編輯器,並驗證日期時間的big-endian格式。
顯示類似'%datadir%'的變量;
C:\ProgramData\MySQL\MySQL Server 5.6\Data\
遍歷到文件夾和數據庫表(dtTest.ibd)
有對時區系統和會話變量:
顯示變量,如 '%system_time_zone%';
Eastern Daylight Time
顯示類似'%time_zone%'的變量;
SYSTEM
讓我清楚,我完全不知道這些的重要性。希望同行能夠增加清晰度。
SELECT @@ global.time_zone,@@ session.time_zone;
SYSTEM SYSTEM
測試復位到不同的東西:
SET SESSION time_zone = '+10:00';
SELECT * FROM dtTest;
請注意,上述設置更改不會影響數據的輸出。它與時區仍然是無關緊要的。
SET SESSION time_zone = 'America/Chicago';
對於上述工作,請參閱:
http://dev.mysql.com/doc/refman/5.6/en/mysql-tzinfo-to-sql.html
否則,如果沒有該時區支持裝載,那麼就需要執行類似:
SET SESSION time_zone = '+10:00';
SELECT @@global.time_zone, @@session.time_zone;
SYSTEM +10:00
設置會話回到我的默認值:
SET SESSION time_zone = 'SYSTEM';
SELECT COUNT(*) FROM mysql.time_zone_name;
我的次數爲0,因爲我沒裝的時區支持的表格中
SELECT CONVERT_TZ('2007-03-11 3:00:00','US/Eastern','US/Central');
- 所以這是NULL我。我的系統上尚未加載支持表。
SELECT CONVERT_TZ('2007-03-11 3:00:00','-4:00','-7:00');
2007-03-11 00:00:00 - 意思是凌晨3點NYC是midnite聖弗蘭
所以上面沒有NULL(不太友好的閱讀UTC時間偏移硬編碼。 )。從dtTest中選擇id,CONVERT_TZ(dt,' - 4:00',' - 7:00'); - dt是我的專欄名稱
1 2016-04-27 06:00:00
上述select語句採用db中的上午9點值,可以將其從紐約時間轉換爲聖弗蘭時間。
這是我爲你準備的最好的。希望有人可以填寫缺少的時區支持細節。
此博客文章可能會回答:[日期是如何存儲的?](https://www.informit.com/library/content.aspx?b=STY_Sql_24hours&seqNum=93) – Phiter
本機類型以原生格式存儲。 –
你能解釋更多關於「它傷害了我很多,,,,」 – Drew