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 01月 18日 星期三 01:15:16 PST
由于PST和PDT之间有夏令时的问题会导致一些时间相差一个小时。(PST与PDT都是美国时间但是中间有一个是含有夏令时的,所以在夏令时的时候回提前一个小时)
2.解决方案:
f配制文件修改:
可以通过修改f
在 [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()|+---------------------+| -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()|+---------------------+| -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)
测试结果:
美国不仅有时区,还有夏令时,冬令时,提前一小时,或者减慢一小时(在时区时间基础上)
美国夏令时将于03月13日当地时间早上02:00(北京时间14:00)开始,至11月6日结束,届时美国的交易时间将较冬令时提前1个小时
mysql> SELECT CONVERT_TZ('-03-13 01:30:00','-8:00','America/Los_Angeles') AS TIME\G*************************** 1. row ***************************TIME: -03-13 01:30:001 row in set (0.00 sec)mysql> SELECT CONVERT_TZ('-03-13 02:30:00','-8:00','America/Los_Angeles') AS TIME\G*************************** 1. row ***************************TIME: -03-13 03:30:001 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
如果觉得《Mysql 时区修改问题(冬令时夏令时)》对你有帮助,请点赞、收藏,并留下你的观点哦!