在linux上确定NLS_LANG

p1tboqfb  于 2023-05-06  发布在  Linux
关注(0)|答案(2)|浏览(140)

如何确定Linux上Oracle Client的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]"
cbjzeqam

cbjzeqam1#

这是一个老问题,所以我想分享一个在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
gfttwv5a

gfttwv5a2#

我想这里可能有些混乱。数据库中使用的字符集可以在V$NLS_PARAMETER中看到。为了客户端,即要正确显示从数据库查询的字符,客户端字符集必须与数据库字符集匹配,或者在运行SQLPlus之前,将NLS_LANG设置为终端程序的字符集。然后,SQLPlus将自动翻译/转换字符集,以便在终端中正确显示。
那么,终端程序使用了什么字符集呢?在运行SQL*Plus之前,请相应地设置NLS_LANG参数。
希望能帮上忙。

相关问题