- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在两个不同的数据库中运行了相同的语句:我的本地数据库和 Oracle Live SQL .
CREATE TABLE test(
timestamp TIMESTAMP DEFAULT SYSDATE,
timestamp_tmz TIMESTAMP WITH TIME ZONE DEFAULT SYSDATE,
timestamp_local_tmz TIMESTAMP WITH LOCAL TIME ZONE DEFAULT SYSDATE
);
INSERT INTO test VALUES (DEFAULT, DEFAULT, DEFAULT);
SELECT * FROM test;
(所有语句大约在同一时间执行 - 欧洲中部时间上午 09:35)
本地数据库的结果:
TIMESTAMP: 10-JAN-23 09.35.32.000000000 AM
TIMESTAMP WITH TIME ZONE: 10-JAN-23 09.35.32.000000000 AM EUROPE/BERLIN
TIMESTAMP WITH LOCAL TIME ZONE: 10-JAN-23 09.35.32.000000000 AM
Oracle Live 的结果:
TIMESTAMP: 10-JAN-23 08.35.44.000000 AM
TIMESTAMP WITH TIME ZONE: 10-JAN-23 08.35.44.000000 AM US/PACIFIC
TIMESTAMP WITH LOCAL TIME ZONE: 10-JAN-23 08.35.44.000000 AM
看到结果后,我的问题是:
最佳答案
不同的数据类型是described in the documentation .
The TIMESTAMP data type is an extension of the DATE data type. It stores year, month, day, hour, minute, and second values. It also stores fractional seconds, which are not stored by the DATE data type.
TIMESTAMP WITH TIME ZONE is a variant of TIMESTAMP that includes a time zone region name or time zone offset in its value.
TIMESTAMP WITH LOCAL TIME ZONE is another variant of TIMESTAMP. It differs from TIMESTAMP WITH TIME ZONE as follows: data stored in the database is normalized to the database time zone, and the time zone offset is not stored as part of the column data. When users retrieve the data, Oracle Database returns it in the users' local session time zone.
您会看到差异,因为您有不同的时区,并且您将值默认为 SYSDATE
,这是系统DATE
.
在本地数据库中,系统时区 ( select dbtimezone from dual
) 似乎基于 CET,而 Live SQL 数据库似乎基于 UTC,正如 Oracle 建议的那样。由于 CET 比 UTC/GMT 早一小时,这就解释了这一小时的差异。
TIMESTAMP
value 只是一个简单的转换,即 cast(SYSDATE as TIMESTAMP
),因此您得到的值与查询 SYSDATE
时得到的值相同。直接添加零小数秒。
对于TIMESTAMP WITH TIME ZONE
它必须存储一个时区,并且必须从某个地方获取该时区,并且默认情况下它使用您的 session 时区,而不是数据库时区。在您的本地数据库中,这似乎也是 CET,但 Live SQL 将 session 时区默认为美国太平洋时间 - 考虑到 Oracle 所在的位置,这并非不合理。所以现在它正在有效地做 from_tz(cast(SYSDATE as TIMESTAMP), SESSIONTIMEZONE)
对于这个值,你在哪里 SESSIONTIMEZONE
一个数据库中为 CET,另一个数据库中为 US/Pacific。
对于TIMESTAMP WITH LOCAL TIME ZONE
它做同样的事情,但然后将其规范化回数据库时区进行存储(实际上 cast(from_tz(cast(SYSDATE as TIMESTAMP), SESSIONTIMEZONE) at time zone DBTIMEZONE as TIMESTAMP)
- 实际上不是内部的,但给了你想法),并再次从数据库时区转换回 session 时区当它被查询时。
在这两个数据库中,如果您 alter session set time_zone = ...
在插入之前,并在查询之前再次设置为不同的值,那么您将看到不同的结果 - 前两列显示的时间部分将保持不变,但 WITH TIME ZONE
的时区将发生变化。 ,时间将更改为 WITH LOCAL TIME ZONE
.
fiddle具有不同的 session 时区。
您可以在我上面链接的文档中阅读有关所有这些行为的更多信息。
如果您使用SYSTIMESTAMP
而不是SYSDATE
作为所有列的默认值,那么您将避免隐式转换为 WITH TIME ZONE
到 session 时区。值,并且将始终显示数据库时区。 LOCAL
列仍将显示在您的 session 时区中,但它们都代表相同的时间。您还将看到两个数据库之间存在一小时的差异,因为它们具有不同的数据库时区。您可以考虑将纯时间戳默认为 sys_extract_utc(SYSTIMESTAMP)
,或者将它们全部(或至少前两个)默认为 SYSTIMESTAMP at time zone 'UTC'
.
fiddle具有 UTC 标准化值。
关于sql - TIMESTAMP、TIMESTAMP with TIME ZONE 和 TIMESTAMP with LOCAL TIME ZONE 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75067418/
int i = 1; int main() { int i = 2; { int i = 3; cout 值为 3)。您能做的最好的事情就是在它仍在范
我可以手动为某些应用程序设置 $locale 吗? 支持本地化的唯一方法是否可能是包含当前语言环境的 Angular 库中的本地化文件。如果存在多种文化怎么办?在这种情况下我必须动态加载本地化文件?我
我有两台机器。一个使用 CUPS 1.5.0,另一个使用 CUPS 1.6.1。两台机器位于同一本地网络上。我想要完全发现网络上的打印机。如果我运行以下命令: CUPS_DEBUG_LEVEL=2 /
所以我基本上是这样做的。 OObjectDatabaseTx result = OObjectDatabasePool.global().acquire( "local:orientdb", "adm
控制台日志重新显示此错误 tsega/meteor-bootstrap3-datetimepicker TypeError: locale() locale it is not loaded from
我在使用 express 4 时很困惑。我使用 express-generator 来生成我的项目。根目录下有app.js,路由器文件有index.js。但是网上关于express的教程都是直接在
问题:直接使用 SimpleDateFormat,无需明确的语言环境Id:SimpleDateFormat SimpleDateFormat format = new SimpleDateFormat
这里的代码在 Python 中,但在使用语言环境的 C/C++ 中的行为应该是相同的。 >>> import locale >>> locale.setlocale(locale.LC_ALL, "f
根据 app-localize-behavior 的 polymer 文档 Each element that displays content to be localized should add
起初我从 this tutorial 实现 l10n到 Flutter 的模板项目文件,这是成功的。之后,我尝试将 MyHomePage 类移动到名为 home.dart 的新文件中。它停止工作是因为
我正在使用源代码中的Postgres 13(Rel_13_STRATE分支),并且我使用的是来自apachea/age源代码的(Release/PG13/1.3.0分支)中的1.3.0版的Apache
我有: 基于节点Express的Web服务器,应仅在用户的本地计算机上运行 一个 Angular 客户端应用程序,它将GET Http请求发送到该本地Web服务器以获取JSON中的数据并将其显示在浏览
问了一些类似的问题,但我的问题是,如果我想传播不同路由中间件的中间结果,最好的方法是什么? app.use(f1); app.use(f2); app.use(f3); function f1(req
我注意到我的本地变量中有从服务器收到的本地变量的副本。例如 Object { settings: "4.2", env: "development", utils: true,
我的网卡不稳定,尤其是从休眠状态恢复后,有时会掉线。退出对应于Vista的网络状态,在通知区域中显示为“仅限本地”。是否可以通过编程方式检索这些状态值(例如“有限连接”,“仅本地”,“本地和Inter
你好想知道在模板中是否有一种简单的方法来访问当前翻译的 lang 字符串。 最佳答案 您可以使用 I18n.locale 访问它. 所以在 ERB 中...... ...在 HAML 中: = I1
我在 Django 中工作。在 Django 中,当您渲染模板时,您向其发送一个上下文字典以进行替换。因为我很懒/干,所以我经常使用 locals() 作为快捷方式,而不是发送看起来像 {'my_va
我一直在尝试让 Java 根据语言环境转换数字。偶遇this post这在很大程度上帮助了我预先理解这一点,我设计了自己的方法将数字转换为特定的语言环境(根据关于这个主题的其他混淆讨论) 所以假设我有
当我运行“hadoop job -status xxx”时,输出以下一些列表。 Rack-local map tasks=124 Data-local map tasks=6 Rack-local m
关闭。这个问题是opinion-based .它目前不接受答案。 想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题. 3个月前关闭。 Improve
我是一名优秀的程序员,十分优秀!