关于数据库中的TIMESTAMP WITH TIME ZONE

本文涉及的产品
云数据库 RDS SQL Server,基础系列 2核4GB
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
简介: 关于TIMESTAMP WITH TIME ZONE,SQL标准中有这么一段描述 SQL2008 TIMESTAMP and TIME may also be specified as being WITH TIME ZONE, in which case ever...
关于TIMESTAMP WITH TIME ZONE,SQL标准中有这么一段描述

SQL2008
  1. TIMESTAMP and TIME may also be specified as being WITH TIME ZONE, in which case every value has
  2. associated with it a time zone displacement. In comparing values of a data type WITH TIME ZONE, the value
  3. of the time zone displacement is disregarded.

SQL标准好像没有明确说附加的 TIME   ZONE要不要作为一个值存下来,具体到不同数据库,对TIMESTAMP WITH TIME ZONE的实现还是有差异的。

Oracle

Oracle的功能最完善,Oracle有3种TIMESTAMP类型,分别是
TIMESTAMP
  无时区概念,存什么时间(年月日时分秒)进去取出来就是什么时间。
TIMESTAMP WITH LOCAL TIME ZONE
  按database timezone存储时间,取数据时按用户session的时区时间返回给用户,取出来的时间是不带时区的。
  Oracle建议把database timezone设置为标准时间UTC,这样可以节省每次转换所需要的开销,提高性能。
TIMESTAMP WITH TIME ZONE
  时间和时区都被存下来,取数据时能获得当初存储的时间和时区。

以下是Oracel手册中的描述
http://docs.oracle.com/database/121/SQLRF/toc.htm

  1. TIMESTAMP Data Type
  2. The TIMESTAMP data type is an extension of the DATE data type. It stores the year, month, and day of the DATE data type, plus hour, minute, and second values. This data type is useful for storing precise time values and for collecting and evaluating date information across geographic regions.
  3. ...
  4. TIMESTAMP WITH TIME ZONE Data Type
  5. TIMESTAMP WITH TIME ZONE is a variant of TIMESTAMP that includes a time zone region name or a time zone offset in its value. The time zone offset is the difference (in hours and minutes) between local time and UTC (Coordinated Universal Time—formerly Greenwich Mean Time). This data type is useful for preserving local time zone information.
  6. ...
  7. TIMESTAMP WITH LOCAL TIME ZONE Data Type
  8. TIMESTAMP WITH LOCAL TIME ZONE is another variant of TIMESTAMP that is sensitive to time zone information. It differs from TIMESTAMP WITH TIME ZONE in that data stored in the database is normalized to the database time zone, and the time zone information is not stored as part of the column data. When a user retrieves the data, Oracle returns it in the user

SQL Server

SQL Server有个奇葩的地方,就是它的“timestamp”其实不是时间日期类型,而是行版本。SQL Server中和SQL标准的TIMESTAMP 对应是下面的数据类型:
datetime/datetime2
  对应于SQL标准TIMESTAMP
datetimeoffset
  SQL Server 2008新加的数据类型,是时间+ 时区偏移量 的组合,相当于SQL标准TIMESTAMP WITH TIME ZONE。

PostgreSQL

PostgreSQL也有奇葩的地方,它的“TIMESTAMP WITH TIME ZONE”从名字上很容易给人不该有的期望。
TIMESTAMP
  对应于SQL标准TIMESTAMP
TIMESTAMP WITH TIME ZONE
  内部是按UTC时区存储的时间,客户端读写该数据时PostgreSQL服务器根据用户session的timezone和UTC的差距进行时间转换。由于并没有把原始的时区值存下来,所以PostgreSQL的“TIMESTAMP WITH TIME ZONE”其实相当于Oracle的“TIMESTAMP WITH LOCAL TIME ZONE”。但是PostgreSQL中名称类似的 “TIME WITH TIME ZONE” 数据里却是存储了时区值的。所以如果确实需要得到原始的时区可以定义一个(date,timetz)的组合类型。


关于 PostgreSQL的“TIMESTAMP WITH TIME ZONE” ,今年PG社区有个讨论,原来 “TIMESTAMP WITH TIME ZONE”是从以前的一个数据类型改名改过来的,并且现在看来改的不太理想

http://www.postgresql.org/message-id/19136.1409325534@sss.pgh.pa.us
  1. That is not the case. The existing implementation is work that Tom
  2. Lockhart did around 6.3 or so. It was called timestamp at the time,
  3. and was renamed to timestamp with time zone in 7.2, in order to make
  4. room for timestamp without time zone (which I think *is* spec compliant
  5. or close enough). That was probably an unfortunate choice; but at
  6. no time was there code in PG that did what the spec says timestamp
  7. with time zone should do.


  8. regards, tom lane


参考:

http://www.postgresql.org/docs/9.4/static/datatype-datetime.html
http://msdn.microsoft.com/zh-cn/library/bb630289.aspx
http://blog.itpub.net/28502651/viewspace-766329/


相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
2月前
|
关系型数据库 MySQL Go
mysql,数据库Server returns invalid timezone. Go to ‘Advanced‘ tab 数据库的行和列没有出现怎么办p
mysql,数据库Server returns invalid timezone. Go to ‘Advanced‘ tab 数据库的行和列没有出现怎么办p
|
4月前
|
数据库连接
数据库连接的时区问题 The server time zone value is unrecognized
数据库连接的时区问题 The server time zone value is unrecognized
43 0
|
关系型数据库 MySQL Java
MySQL 数据库时区设置方法,“The server time zone value ‘�й���׼ʱ��‘ is unrecognized or represents ...” 问题解决
MySQL 数据库时区设置方法,“The server time zone value ‘�й���׼ʱ��‘ is unrecognized or represents ...” 问题解决
343 0
|
关系型数据库 MySQL 数据库
DataGrip 2020.1连接数据库报错 Server returns invalid timezone. Need to set‘serverTimezone’property
DataGrip 2020.1连接数据库报错 Server returns invalid timezone. Need to set‘serverTimezone’property
223 0
DataGrip 2020.1连接数据库报错 Server returns invalid timezone. Need to set‘serverTimezone’property
|
关系型数据库 MySQL Go
idea连接mysql数据库遇到Server returns invalid timezone. Go to ‘Advanced‘ tab and set ‘serverTimezone‘ 。。。。。
idea连接mysql数据库遇到Server returns invalid timezone. Go to ‘Advanced‘ tab and set ‘serverTimezone‘ 。。。。。错误显示及解决办法。
idea连接mysql数据库遇到Server returns invalid timezone. Go to ‘Advanced‘ tab and set ‘serverTimezone‘ 。。。。。
|
Go 数据库
IDEA连接数据库错误:Server returns invalid timezone. Go to ‘Advanced‘ tab and set ‘serverTimezon‘ 错误
IDEA连接数据库错误:Server returns invalid timezone. Go to ‘Advanced‘ tab and set ‘serverTimezon‘ 错误
139 0
IDEA连接数据库错误:Server returns invalid timezone. Go to ‘Advanced‘ tab and set ‘serverTimezon‘ 错误
|
4天前
|
存储 SQL 关系型数据库
使用MySQL Workbench进行数据库备份
【9月更文挑战第13天】以下是使用MySQL Workbench进行数据库备份的步骤:启动软件后,通过“Database”菜单中的“管理连接”选项配置并选择要备份的数据库。随后,选择“数据导出”,确认导出的数据库及格式(推荐SQL格式),设置存储路径,点击“开始导出”。完成后,可在指定路径找到备份文件,建议定期备份并存储于安全位置。
57 11
|
23天前
|
弹性计算 关系型数据库 数据库
手把手带你从自建 MySQL 迁移到云数据库,一步就能脱胎换骨
阿里云瑶池数据库来开课啦!自建数据库迁移至云数据库 RDS原来只要一步操作就能搞定!点击阅读原文完成实验就可获得一本日历哦~
|
5天前
|
存储 SQL 关系型数据库
一篇文章搞懂MySQL的分库分表,从拆分场景、目标评估、拆分方案、不停机迁移、一致性补偿等方面详细阐述MySQL数据库的分库分表方案
MySQL如何进行分库分表、数据迁移?从相关概念、使用场景、拆分方式、分表字段选择、数据一致性校验等角度阐述MySQL数据库的分库分表方案。
一篇文章搞懂MySQL的分库分表,从拆分场景、目标评估、拆分方案、不停机迁移、一致性补偿等方面详细阐述MySQL数据库的分库分表方案