0

vb.net 客户端以不同方式解释来自我的 oracle 11g 服务器的时间戳存在问题。我在客户端机器上使用 VS2010、VB.NET、11.2.0.30 驱动程序、Win XP。

两台机器上的软件相同,用户在服务器上的权限相同。

当我使用每个用户凭据通过 toad 登录并执行 SELECT SYSDATE FROM DUAL 时;我得到 YYYY-MM-DD HH24:MI:SS 格式。

当我从 DUAL 中执行 SELECT SYSDATE 时,通过我的应用程序;PC1: DD/MM/YYYY HH24:MI:SS PC2: YYYY-MM-DD HH24:MI:SS

我确实更改了我的服务器端设置以使用 YYYY-MM-DD 24HH:MI:SS 格式 为什么该设置仅在某些电脑上被否决?我怎样才能让所有客户都保持一致?

提前致谢。

4

1 回答 1

1

每个客户端都有自己的NLS_DATE_FORMAT设置,这些设置可能设置在某个可见的地方(例如在 Toad 中),或者可能由平台或驱动程序默认设置,并且可能通过语言环境设置间接继承。NLS_TIMESTAMP_FORMAT我认为默认情况下被覆盖的情况不太常见,但我不确定您指的是 OracleTIMESTAMP还是DATE,它也有一个时间组件。

客户端设置总是覆盖服务器设置,因此更改服务器不太可能有帮助,并且您可能只有一些客户端已经设置了匹配的格式。在会话级别使用alter session命令连接后,客户端设置本身可以被显式覆盖,或者在 SQL 语句中单独覆盖。优先级显示在全球化支持指南中。

一般来说,您永远不应该依赖隐式数据转换。除了简单的即席查询之外,通常使用明确的日期格式掩码选择日期进行显示,例如select to_char(sysdate, 'YYYY-MM-DD HH24:MI:SS') from dual. 如果您的应用程序希望以特定格式返回日期(作为字符串),那么这样做会更安全……尽管通常您会DATE退回并让客户端进行格式化。

可以说,在通过调用从字符串中插入数据时始终指定格式掩码更为重要to_date(),但您的客户端通常会再次处理该问题并传递DATE.

于 2013-01-09T21:16:49.830 回答