Datetime 在不同的RDBMS中一致地处理日期时间
我正在计划一个分布式应用系统,它将与不同类型的RDBMS进行通信。其中一个要求是跨所有RDBMS类型一致地处理日期时间。所有日期时间值必须为毫秒精度,包括时区信息,并存储在单个列中 由于不同的RDBMS处理日期和时间的方式不同,我担心在这种情况下不能依赖于它们的本机列类型,因此我必须提出不同的解决方案。(如果我错了,欢迎你给我指路。) 无论是什么解决方案,理想情况下都应该允许在SQL级别轻松排序和比较。其他方面,如可读性和使用SQL datetime函数的能力并不重要,因为这一切都将由网关服务处理 我想把我的DateTime值存储在一个无符号的largeint列类型(8字节)中。我还不确定所有的RDBMS(MSSQL、Oracle、DB2、PostgreSQL、MySQL,可能还有其他一些)是否真的有这样一种类型,但现在我假设它们有 至于存储格式。。。例如,2009-01-01T12:00:00.999+01:00的存储方式类似于?20090101120000999??,它的大小不超过8个字节 我可以用这种方式存储的最短日期时间是0001-01-01T00:00:00.000+xx:xx,最长是8000-12-31T23:59:59.999+xx:xx,这给了我足够的时间跨度 由于最大无符号largeint值为18446744073709551615,因此我将使用以下3位数字(用A和BB标记)来存储时区信息:axxxxxxxxxxxxxxbb 考虑到0001..8000的最大年跨度,A可以是0或1,BB可以是00到99之间的任意值 现在的问题是:Datetime 在不同的RDBMS中一致地处理日期时间,datetime,timezone,rdbms,Datetime,Timezone,Rdbms,我正在计划一个分布式应用系统,它将与不同类型的RDBMS进行通信。其中一个要求是跨所有RDBMS类型一致地处理日期时间。所有日期时间值必须为毫秒精度,包括时区信息,并存储在单个列中 由于不同的RDBMS处理日期和时间的方式不同,我担心在这种情况下不能依赖于它们的本机列类型,因此我必须提出不同的解决方案。(如果我错了,欢迎你给我指路。) 无论是什么解决方案,理想情况下都应该允许在SQL级别轻松排序和比较。其他方面,如可读性和使用SQL datetime函数的能力并不重要,因为这一切都将由网关服务处
- 你觉得我提出的解决方案怎么样?它是有价值的还是愚蠢的
- 如果没有更好的方法,您建议如何将剩余的三位数字最好地用于时区信息
的大陆/地区
,是特定地区人民使用的偏移量过去、现在和未来变化的历史
CST、PST、IST等2-4个字母的缩写不是正式的时区名称,没有标准化,甚至不是唯一的(避免使用)
由于不同的RDBMS处理日期和时间的方式不同,我担心在这种情况下不能依赖于它们的本机列类型,因此我必须提出不同的解决方案
SQL标准确实定义了一些主要数据库支持的几种类型
表示一个时刻,即时间线上的一个特定点。我隐约记得听说一个数据库实际上存储了传入的时区。但大多数情况下,如Postgres,使用传入值上指示的时区调整为UTC,然后存储该UTC值,最后丢弃区域信息。检索时,将返回UTC值。小心那些具有防混淆功能的工具和中间件,它们在检索之后和向用户显示之前应用默认时区带有时区的时间戳
rep不带时区的时间戳