确定Linux上的NLS_LANG

问题描述 投票:0回答:2

如何确定 Linux 上 Oracle 客户端的 NLS_LANG 设置?

我还没有明确设置 NLS_LANG。

应用程序向数据库传送 utf-8 编码字符时,是否需要设置并导出变量 NLS_LANG=AMERICAN_AMERICA.AL32UTF8?

Oracle 客户端是否已经知道基于我的区域设置的编码?

me@ora11gR2> !echo $LANG
en_US.UTF-8


me@ora11gR2> !locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

me@ora11gR2> !echo $NLS_LANG


me@ora11gR2> @.[$NLS_LANG]
SP2-0310: unable to open file ".[$NLS_LANG]"
linux oracle utf-8 character-encoding
2个回答
0
投票

老问题,所以我想分享一个过去的旧答案,它仍然适用于 SQL*Plus。

@%NLS_LANG%

这输出类似:

SP2-0310: unable to open file "ENGLISH_IRELAND.UTF8"

这告诉您 NLS_LANG 环境变量设置为

ENGLISH_IRELAND.UTF8

您也可以运行此查询:

SELECT DISTINCT client_charset FROM v$session_connect_info
WHERE sid = sys_context('USERENV','SID');

输出:

CLIENT_CHARSET
--------------------
UTF8

0
投票

我认为这里可能有些混乱。数据库中使用的字符集可以在

V$NLS_PARAMETER
中看到。为了让客户端(即运行 SQL*Plus 的终端程序)正确显示从数据库查询的字符,客户端字符集必须与数据库字符集匹配,或者在运行 SQL*Plus 之前将 NLS_LANG 设置为字符集的终端程序。然后 SQL*Plus 将自动翻译/转换字符集,以便在终端中正确显示。

那么,终端程序使用什么字符集呢?在运行 SQL*Plus 之前相应地设置 NLS_LANG 参数。

© www.soinside.com 2019 - 2024. All rights reserved.