MySQL 5.6.4及以上版本的datetime数据类型保存方式如手册页面“日期和时间数据类型表示”所述。简而言之,它是一个包括小数秒的5字节格式,并且不包含时区信息。
测试表格
create table dtTest
(
id int auto_increment primary key,
dt datetime not null
);
insert dtTest (dt) values ('2016-04-27 09:00:00');
如果需要确认,可以跳转到保存文件的十六进制编辑器并验证该日期时间的大端格式。
show variables like '%datadir%';
C:\ProgramData\MySQL\MySQL Server 5.6\Data\
遍历文件夹和数据库表(dtTest.ibd)
有关时区的系统和会话变量:
show variables like '%system_time_zone%';
Eastern Daylight Time
show variables like '%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');
SELECT CONVERT_TZ('2007-03-11 3:00:00','-4:00','-7:00');
2007-03-11 00:00:00
因此,上述内容不为NULL(对于阅读UTC时间偏移量不太友好。硬编码)。
SELECT id, CONVERT_TZ(dt,'-4:00','-7:00') from dtTest;
1 2016-04-27 06:00:00
上面的选择语句获取数据库中的9am值,可以将其从纽约时间转换为旧金山时间。
这是我为您提供的最好的内容。希望有人可以提供缺失的时区支持细节。