
# Flink Opensource SQL从RDS数据库读取的时间和RDS数据库存储的时间为什么会不一致？
#### 问题描述
Flink Opensource SQL从RDS数据库读取的时间和RDS数据库存储的时间为不一致
#### 根因分析
该问题的根因是数据库设置的时区不合理，通常该问题出现时Flink读取的时间和RDS数据库的时间会相差13小时。
请在RDS数据库内执行如下语句
```
show variables like '%time_zone%'
```
执行结果如下：
图1执行结果   
![](https://support.huaweicloud.com/dli_faq/zh-cn_image_0000001882875345.png)
表1参数说明 
| 参数               | 说明                                                                                                                            |
|:---|:---|
| system_time_zone | **数据库时区。** 这里它指向 'SYSTEM'，也就是数据库服务器的系统时间（'system_time_zone'）。而这个系统时间在这里指向 CST，所以，最终数据库时区才是 CST。 |
| time_zone        | **数据库所在服务器的时区，服务器是台主机**。 如本地数据库所在计算机的默认时区是中国标准时间，则查出来 'system_time_zone' 是 CST。                |
   
问题根因：在Mysql的time_zone是SYSTEM，system_time_zone是CST的情况下会造成bug。
CST在mysql里被理解为China Standard Time（UTC+8），但在 Java 里被理解为Central Standard Time (USA)（UTC-5）。
Flink taskmanager本质是一个 java 进程，在Mysql 的jdbc驱动的代码里会设置时区，这个时区是通过TimeZone.getTimeZone(canonicalTimezone) 读取的。也就是说，读取的是CST（UTC+8），但真正设置的时区却是CST（UTC-5）。
#### 解决方案
1. 数据库设置 time_zone 的值为非 SYSTEM，比如 +08:00。
2. 设置jdbcUrl时带上时区。 例如'jdbc:mysql://localhost:3306/test?serverTimezone=Asia/Shanghai'。
   
 
