为什么mysql数据库的时间和页面展示不一致?:不同数据库在不同时区读取timestamp类型数据值不同

说明:数据库用的mysql,而且类型是timestamp
结论:

1、Oracle和MySQL中的timestamp的作用是不同的

Oracle中,TIMESTAMP是对date的更高精度的一种存储,是作为datetime的延展,但它不存储时区信息

Oracle中,TIMESTAMP WITH TIME ZONE存储时区信息

Oracle中,TIMESTAMP WITH LOCAL TIME ZONE不会存储时区信息,将时间数据转换为数据库时区的时间数据进行存储,但不存储时区信息;客户端检索时,oracle会将数据库中存储的时间数据转换为客户端session时区的时间数据后返回给客户端

MYSQL中,的TIMESTAMP是为了更少的存储单元(DATETIME为4字节,TIMESTAMP为1个字节)但是范围为1970的某时的开始到2037年,而且会根据客户端的时区判断返回值,MYSQL的TIMESTAMP时区敏感这点和ORACLE的TIMESTAMP WITH LOCAL TIME ZONE一致。

2、ORACLE和MYSQL的函数返回不一样

oracle读取的时区信息是以client端为准,CURRENT_TIMESTAMP都受到客户端SESSION TIMEZONE影响,而SYSDATE,SYSTIMESTAP不受影响

mysql读取的时区信息是以server端为准,NOW(),SYSDATE(),CURRENT_TIMESTAMP 均不受到客户端连接时区影响

DTS始终为client端,数据到达DTS时,都统一变成纯字符串

3、Oracle的DBTIMEZONE只和TIMESTAMP WITH LOCAL TIME ZONE有关。MySQL中的time_zone直接影响所有的timestamp取值。

4、为了返回一致的数据MYSQL设置TIME_ZONE参数即可,因为他是每个连接都会用到的,但是ORACLE最好使用SYSDATE或者SYSTIMESTAMP来直接取DB SERVER端时间。

5、MySQL修改时区信息,只要CLIENT端的时区信息不变,此无影响。

6、Oracle修改时间信息,同理,TIMESTAMP WITH LOCAL TIME ZONE不受影响,TIMESTAMP和TIMESTAMP WITH TIME ZONE会发生变化。

7、如果在client中不指定时区信息,oracle以client端的时区信息为准,要进行转换,mysql以server端的时区信息为准。

原文:https://www.cnblogs.com/scoopr/p/5592339.html

你可能感兴趣的:(数据库)