防止来自主机数据库的时区值被客户端覆盖

Posted

技术标签:

【中文标题】防止来自主机数据库的时区值被客户端覆盖【英文标题】:Preventing Time Zone values from host DB from overriding by client 【发布时间】:2012-05-15 13:08:36 【问题描述】:

早上:

在我previously asked 的一个问题中,我收集了一些关于在 PL SQL 查询中管理时区值的有用技巧。

不过,我误解了这个问题。

我们有一个表格,其中记录的日期和时间因时区而异。这些记录由 C# 程序集查询并被发送到 AXIS 服务。

当记录到达在印度托管的 AXIS 服务时,时区更改为 IST。

我需要做的是确保记录中的时区是从任何其他时区查询数据时收到的时区。

我该怎么做?我不确定这是否是一个 Oracle/PL SQL 查询问题,如果不是,请直截了当。

感谢您的任何见解。

【问题讨论】:

【参考方案1】:

正在传递哪些数据类型?

根据您之前的问题,您在 Oracle 中使用的数据类型是 DATE。 Oracle DATE 没有与之关联的时区。除非您将时区存储在您未提及的单独列中,否则这意味着堆栈中的其他位置,DATE 正在从 Oracle 读取(或写入 Oracle)并隐含时区。堆栈的任何组件暗示时区都是罪魁祸首。

从 Oracle 的角度来看,最好的选择是使用 TIMESTAMP WITH [LOCAL] TIME ZONE 数据类型,以便 Oracle 知道时区。然后,您可以在 PL/SQL 中将一个时区的时间戳转换为另一个时区的时间戳。因此,您始终可以在 IST 或始终在 GMT/UTC 或始终在美国/东部获取数据。

【讨论】:

谢谢,贾斯汀。我将(再次)审查堆栈。哦,谢谢你的投反对票,神秘的投反对票,因为我们都知道他们对像我这样的邪恶新手监管 SO 有多大帮助 @Teknophyl - 否决票可能是因为您还没有完全定义问题。 将贾斯汀的回复标记为答案。事实证明,偏移量正在我的程序集中的 GetXml 方法中应用。感谢您的帮助和耐心。

以上是关于防止来自主机数据库的时区值被客户端覆盖的主要内容,如果未能解决你的问题,请参考以下文章

如何处理服务器和客户端之间的时区?

如何防止值被移动?

如何将 datagrip 设置为与主机数据库相同的时区

如何防止 Apache Web 服务器接受来自未知主机的请求

值被覆盖的哈希表问题

防止来自恶意 protobuf 数据包的 DoS 攻击