【问题标题】:setting NLS_LANG only for SQL*Plus仅为 SQL*Plus 设置 NLS_LANG
【发布时间】:2013-06-12 11:28:57
【问题描述】:

我在注册表中为我的本地语言设置了NLS_LANG。 CMD 无法显示我当地语言的字符,所以我看到了 jibrish。 我说的是来自客户端的提示,而不是实际数据,例如错误消息。

SQL> conn scott/tiger
ετσß°.

我需要将客户端的设置保留为本地 NLS,因为其他程序都依赖于它。

我尝试在 glogin 中添加 $set NLS_LANG=AMERICAN_AMERICA.WE8MSWIN1252,但显然它不起作用,因为脚本仅在 sql*Plus 已启动后才执行。

我的问题是,有没有办法将NLS_LANG 设置为AMERICAN_AMERICA.WE8MSWIN1252 用于 SQL*Plus ?

【问题讨论】:

  • 创建一个运行SET NLS_LANG=..然后调用sqlplus的批处理文件
  • 如果我找不到创造性的解决方案,我最终会这样做......
  • glogin.sql 只影响 SQL*Plus。为什么你认为它不起作用?
  • 您是否尝试过“更改会话集 NLS_LANG=AMERICAN_AMERICA.WE8MSWIN1252;”在 glogin.sql 中?
  • 在启动 SQL*Plus 之前您是否运行过chcp 1252

标签: oracle sqlplus


【解决方案1】:

NLS_LANG 不能为 SQL*Plus 中的会话更改。您只能设置语言、地区、数字字符等... 例如:

ALTER SESSION SET NLS_LANGUAGE = 'AMERICAN';
ALTER SESSION SET NLS_NUMERIC_CHARACTERS = '.,';

NLS_LANG 被设置为环境变量,所以在运行 SqlPlus 之前使用:

在 Windows 上:

set NLS_LANG=AMERICAN_AMERICA.WE8MSWIN1252

在 Unix 上(Solaris 和 Linux、centos 等)

export NLS_LANG=AMERICAN_AMERICA.WE8MSWIN1252

【讨论】:

    【解决方案2】:

    您可以在 SQL*Plus 启动时使用login.sql or glogin.sql 运行任意命令,因此请在其中设置适当的会话设置

    【讨论】:

      【解决方案3】:

      改变会话集 nls_language='AMERICAN';

      会解决你的问题...

      【讨论】:

        【解决方案4】:

        当我今天遇到同样的问题时,这对我有用

        在运行 sqlplus 之前从 windows 命令提示符运行

        set NLS_LANG=.AL32UTF8
        

        【讨论】:

          【解决方案5】:
          set linesize 2000;
          select * from NLS_DATABASE_PARAMETERS; 
          
          
          SHUTDOWN IMMEDIATE;
          
          STARTUP MOUNT;
          
          ALTER SYSTEM ENABLE RESTRICTED SESSION;
          
          ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
          
          ALTER SYSTEM SET AQ_TM_PROCESSES=0;
          
          ALTER DATABASE OPEN;
          
          ALTER DATABASE CHARACTER SET INTERNAL_USE  WE8MSWIN1252;
          alter database national character set internal_use AL16UTF16;
          
          SHUTDOWN IMMEDIATE; 
          STARTUP;
          

          【讨论】:

          • 你应该在你的答案中添加一些解释,这可以帮助其他人。 How to Answer
          • 命令 ALTER DATABASE CHARACTER SET ... 自 Oracle 10R1 起不再支持,您可能会破坏您的数据库(参见示例 stackoverflow.com/questions/15224015/…)。但是,如果旧字符集是 US7ASCII,那么这种方法可能会异常有效。
          猜你喜欢
          • 2019-08-25
          • 2012-11-15
          • 2013-11-12
          • 2014-08-10
          • 2010-11-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-11-07
          相关资源
          最近更新 更多