知道 数据库字符如何(NLS_CHARACTERSETselect * from v$nls_parameters;)和客户端字符集(客户端环境设置 NLS_LANG) 相互作用。

但是,我找不到的是如何或是否可以确定 对于既定会议, ,Oracle认为当前的客户端字符是什么。

这根本可以吗?

笔记: SELECT * FROM NLS_SESSION_PARAMETERS;不是 包括字符集(在10G2上)。

要明确我想完成的工作:

  1. NLS_LANG将客户环境设置为任意值(例如 GERMAN_GERMANY.WE8MSWIN1252)
  2. 数据库应用程序[*]启动并建立了与Oracle数据库的连接/会话。
  3. 数据库应用程序[*]想要“问” Oracle (不是其OS环境)oracle将假设的客户端字符集。

*]:如果DB应用程序为SQLPLU,则该示例如下:

...
sqlplus /nolog
connect user/pass@example
*magic command*;
   CLIENT CHARACTERSET = ...

杰克在回答中的笔记提出了两个重要的观点:

  • 与Oracle, 字符集翻译吗?它是客户端图形代码还是在服务器端完成?
  • 看来是客户 客户 将需要公开此设置 - 客户端LIB/工具假设此设置是什么。是否有Oracle客户端/工具(SQLPLUS,OCI/OCCI,Pro*c,...)可以查询其认为此设置的内容?
有帮助吗?

解决方案

我有点怀疑这是您想要的,但是

host echo %nls_lang%;

ENGLISH_UNITED KINGDOM.WE8ISO8859P1

在客户端上显示客户端NLS_LANG环境变量。

我认为不会有一个SQL查询,您可以运行以提供“当前”设置,因为AFAIK服务器不知道要完成了哪些翻译客户端,因此任何要显示当前设置的命令都必须是本地向客户端 - 我将SQL开发人员用于上述命令,但是我认为它在SQL*Plus中的工作

- 编辑

来自Asktom:

只有客户也知道他们的角色集 - 它在“数据库中”不可用

字符集描述了数据库中存储的内容。

客户通过NLS_LANG SETINTTINT将所需的所需转换为角色已知[SIC]到数据库。

如果您在11.1+上 你可能有些快乐 使用v $ session_connect_info,因为:

OCI将此信息推向服务器ATS登录时间。

但是我发现这仍然取决于您的联系

其他提示

你可以看到 以下:

  • NLS_CALENDAR
  • NLS_Currency
  • nls_date_format
  • nls_date_language
  • NLS_SORT
  • NLS_Territor

例如:

SQL> select sys_context('USERENV', 'NLS_TERRITORY') from dual;

SYS_CONTEXT('USERENV','NLS_TERRITORY')
--------------------------------------------------------------------------------
UNITED KINGDOM

1 row selected.
许可以下: CC-BY-SA归因
不隶属于 dba.stackexchange
scroll top