Mysql 时区修改问题(冬令时夏令时)

1.起因:

前两天发现有一台mysql的测试机环境出现了和系统时区不一致的情况,情况如下:

mysql> show variables like '%time_zone%';  
+------------------+--------+
| Variable_name    | Value  |
+------------------+--------+
| system_time_zone | PDT    |
| time_zone        | SYSTEM |
+------------------+--------+
2 rows in set (0.01 sec)

[root@test2 ~]# date
2017年 01月 18日 星期三 01:15:16 PST

由于PST和PDT之间有夏令时的问题会导致一些时间相差一个小时。(PST与PDT都是美国时间但是中间有一个是含有夏令时的,所以在夏令时的时候回提前一个小时)

2.解决方案:

my.cnf配制文件修改:

可以通过修改my.cnf
在 [mysqld] 之下加

default-time-zone=timezone

来修改时区。如:

default-time-zone = '+8:00'

通过命令:

set time_zone = timezone

比如北京时间(GMT+0800)

set time_zone = '+8:00';

eg:

mysql> set time_zone = '+8:00';   
Query OK, 0 rows affected (0.17 sec)

mysql> select now(); 
+---------------------+
| now()               |
+---------------------+
| 2016-06-23 16:32:53 |
+---------------------+
1 row in set (0.00 sec)

mysql> set time_zone = '-8:00';   
Query OK, 0 rows affected (0.00 sec)

mysql> select now();   
+---------------------+
| now()               |
+---------------------+
| 2016-06-23 00:33:21 |
+---------------------+
1 row in set (0.00 sec)

mysql 数据库中的时区信息默认为空:
mysql> show tables like "%time%";
+---------------------------+
| Tables_in_mysql (%time%) |
+---------------------------+
| time_zone |
| time_zone_leap_second |
| time_zone_name |
| time_zone_transition |
| time_zone_transition_type |
+---------------------------+
5 rows in set (0.00 sec)

插入后出现:(切记千万不要drop这个表只能清空,否则你以后都无法添加了,或者你需要重新新建这个表。建议不要否则重建特别的恶心)

mysql> SELECT * FROM time_zone_name WHERE name LIKE 'America/%' limit 10;
+----------------------------------+--------------+
| Name                             | Time_zone_id |
+----------------------------------+--------------+
| America/Adak                     |           54 |
| America/Anchorage                |           55 |
| America/Anguilla                 |           56 |
| America/Antigua                  |           57 |
| America/Araguaina                |           58 |
| America/Argentina/Buenos_Aires   |           59 |
| America/Argentina/Catamarca      |           60 |
| America/Argentina/ComodRivadavia |           61 |
| America/Argentina/Cordoba        |           62 |
| America/Argentina/Jujuy          |           63 |
+----------------------------------+--------------+
10 rows in set (0.00 sec)

测试结果:
美国不仅有时区,还有夏令时,冬令时,提前一小时,或者减慢一小时(在时区时间基础上)
美国2016年夏令时将于2016年03月13日当地时间早上02:00(北京时间14:00)开始,至2016年11月6日结束,届时美国的交易时间将较冬令时提前1个小时

mysql>  SELECT CONVERT_TZ('2016-03-13 01:30:00','-8:00','America/Los_Angeles') AS TIME\G
*************************** 1. row ***************************
TIME: 2016-03-13 01:30:00
1 row in set (0.00 sec)

mysql> SELECT CONVERT_TZ('2016-03-13 02:30:00','-8:00','America/Los_Angeles') AS TIME\G
*************************** 1. row ***************************
TIME: 2016-03-13 03:30:00
1 row in set (0.00 sec)


付时区偏移差:

GMT 格林威治标准时间 GMT
UTC 全球标准时间 GMT
ECT 欧洲中部时间 GMT+1:00
EET 东欧时间 GMT+2:00
ART (阿拉伯)埃及标准时间 GMT+2:00
EAT 东非时间 GMT+3:00
MET 中东时间 GMT+3:30
NET 近东时间 GMT+4:00
PLT 巴基斯坦拉合尔时间 GMT+5:00
IST 印度标准时间 GMT+5:30
BST 孟加拉国标准时间 GMT+6:00
VST 越南标准时间 GMT+7:00
CTT 中国台湾时间 GMT+8:00
JST 日本标准时间 GMT+9:00
ACT 澳大利亚中部时间 GMT+9:30
AET 澳大利亚东部时间 GMT+10:00
SST 所罗门标准时间 GMT+11:00
NST 新西兰标准时间 GMT+12:00
MIT 中途岛时间 GMT-11:00
HST 夏威夷标准时间 GMT-10:00
AST 阿拉斯加标准时间 GMT-9:00
PST 太平洋标准时间 GMT-8:00
PNT 菲尼克斯标准时间 GMT-7:00
MST 西部山脉标准时间 GMT-7:00
CST 中部标准时间 GMT-6:00
EST 东部标准时间 GMT-5:00
IET 印第安那东部标准时间 GMT-5:00
PRT 波多黎各和美属维尔京群岛时间 GMT-4:00
CNT 加拿大纽芬兰时间 GMT-3:30
AGT 阿根廷标准时间 GMT-3:00
BET 巴西东部时间 GMT-3:00
CAT 中非时间 GMT-1:00


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值