System TZ和DB TZ之间的时区意识差异?

时间:2017-12-07 04:12:18

标签: mysql timestamp utc rds amazon-rds-aurora

我目前正在将数据库从本地MySQL主机迁移到RDS中的Aurora。

使用以下方法检查两个系统上的时区设置:

SELECT @@system_time_zone, @@global.time_zone, @@session.time_zone, NOW(), UTC_TIMESTAMP();

本地Mysql

+--------------------+--------------------+---------------------+---------------------+---------------------+
| @@system_time_zone | @@global.time_zone | @@session.time_zone | NOW()               | UTC_TIMESTAMP()     |
+--------------------+--------------------+---------------------+---------------------+---------------------+
| AEDT               | SYSTEM             | SYSTEM              | 2017-12-07 15:05:29 | 2017-12-07 04:05:29 |
+--------------------+--------------------+---------------------+---------------------+---------------------+

RDS(极光)

+--------------------+--------------------+---------------------+---------------------+---------------------+
| @@system_time_zone | @@global.time_zone | @@session.time_zone | NOW()               | UTC_TIMESTAMP()     |
+--------------------+--------------------+---------------------+---------------------+---------------------+
| UTC                | Australia/Sydney   | Australia/Sydney    | 2017-12-07 15:05:29 | 2017-12-07 04:05:29 |
+--------------------+--------------------+---------------------+---------------------+---------------------+

问题:

10月1日之后的时间戳(DST发生的时间)相等,但差异在一小时之前,见下文:

本地MySQL

+--------+---------------------+---------------------+
| id     | created_at          | updated_at          |
+--------+---------------------+---------------------+
|      1 | 2017-08-21 05:08:02 | 2017-08-21 05:20:01 |
|      2 | 2017-08-21 05:08:02 | 2017-08-21 05:20:01 |
|      3 | 2017-08-21 05:08:02 | 2017-08-21 05:20:01 |
|  30000 | 2017-09-07 00:45:02 | 2017-09-07 01:10:03 |
|  98350 | 2017-09-30 19:15:03 | 2017-09-30 19:40:03 |
|  98357 | 2017-10-01 08:00:02 | 2017-10-01 08:25:03 |
|  98358 | 2017-10-01 08:00:02 | 2017-10-01 08:25:03 |
|  98359 | 2017-10-01 08:00:02 | 2017-10-01 08:25:03 |
| 100361 | 2017-10-01 19:05:03 | 2017-10-01 19:30:03 |
| 100411 | 2017-10-01 19:10:04 | 2017-10-01 19:35:03 |
| 100412 | 2017-10-01 19:10:04 | 2017-10-01 19:35:03 |
| 394449 | 2017-12-07 08:30:03 | 2017-12-07 09:00:04 |
| 394472 | 2017-12-07 08:30:03 | 2017-12-07 09:00:08 |
+--------+---------------------+---------------------+

RDS(极光)

+--------+---------------------+---------------------+
| id     | created_at          | updated_at          |
+--------+---------------------+---------------------+
|      1 | 2017-08-21 06:08:02 | 2017-08-21 06:20:01 |
|      2 | 2017-08-21 06:08:02 | 2017-08-21 06:20:01 |
|      3 | 2017-08-21 06:08:02 | 2017-08-21 06:20:01 |
|  30000 | 2017-09-07 01:45:02 | 2017-09-07 02:10:03 |
|  98350 | 2017-09-30 20:15:03 | 2017-09-30 20:40:03 |
|  98357 | 2017-10-01 08:00:02 | 2017-10-01 08:25:03 |
|  98358 | 2017-10-01 08:00:02 | 2017-10-01 08:25:03 |
|  98359 | 2017-10-01 08:00:02 | 2017-10-01 08:25:03 |
| 100361 | 2017-10-01 19:05:03 | 2017-10-01 19:30:03 |
| 100411 | 2017-10-01 19:10:04 | 2017-10-01 19:35:03 |
| 100412 | 2017-10-01 19:10:04 | 2017-10-01 19:35:03 |
| 394449 | 2017-12-07 08:30:03 | 2017-12-07 09:00:04 |
| 394472 | 2017-12-07 08:30:03 | 2017-12-07 09:00:08 |
+--------+---------------------+---------------------+

问题:

  1. 是否同时识别设置时区?
  2. 如果不是,那不是吗?
  3. 我怎么能说出来? : - )
  4. Afaik MySQL以UTC格式存储时间戳,并根据时区在读取和写入时透明地转换它们(有关详细信息,请参阅此SO reply)。有没有办法在没有任何(透明或非透明)转换的情况下获取时间戳字段的原始值?

0 个答案:

没有答案