Mar*_*tin 9 oracle character-set
我知道数据库字符集(NLS_CHARACTERSET
in select * from v$nls_parameters;
)和客户端字符集(客户端环境设置NLS_LANG
)是如何交互的。
然而,我不知道的是,我如何或是否可以确定, 对于已建立的会话,Oracle 认为当前客户端字符集是什么。
这可能吗?
注意:SELECT * FROM NLS_SESSION_PARAMETERS;
确实不包含字符集(上10G2)。
完全清楚我想完成什么:
GERMAN_GERMANY.WE8MSWIN1252
)[*]:如果db应用程序是sqlplus,示例如下:
...
sqlplus /nolog
connect user/pass@example
*magic command*;
CLIENT CHARACTERSET = ...
Run Code Online (Sandbox Code Playgroud)
杰克在他的回答中的注释提出了两个要点:
我有点怀疑这正是你要找的,但是
host echo %nls_lang%;
ENGLISH_UNITED KINGDOM.WE8ISO8859P1
Run Code Online (Sandbox Code Playgroud)
显示客户端上的客户端 nls_lang 环境变量。
我认为您不会运行 SQL 查询来提供“当前”设置,因为 AFAIK 服务器不知道客户端完成了什么翻译,因此任何显示当前设置的命令都必须是本机的到客户端 - 我使用 SQL Developer 执行上述命令,但我认为它在 SQL*Plus 中的工作方式相同
- 编辑
只有客户端也知道他们的字符集——它在“数据库中”不可用
字符集描述了数据库中存储的内容。
客户端通过 NLS_LANG 设置将他们想要的翻译成字符知道 [原文如此] 到数据库。
如果您使用的是 11.1+,您可能会对v$session_connect_info感到高兴,因为:
此信息在登录时由 OCI 推送到服务器。
但我发现它仍然取决于您的连接方式,例如从您没有使用 OCI 的 JDBC 瘦驱动程序,因此不会推送信息