• 环境变量NLS_LANG


    NLS_LANG是一个环境变量,用于定义语言,地域以及字符集属性。对于非英语的字符集,NLS_LANG的设置就非常重要。
    NLS:‘National Language Support (NLS)’ 当我们设定一种nls的时候实际上我们是为oracle在存放数据时指定了他的语种所特有的一些表达形式,比如我们选择chinese,那么它的中文字符如何存放,按什么规则排序,货币如何表示,日期格式也就被设定了。
     
    NLS_LANG参数由以下部分组成:NLS_LANG=<Language>_<Territory>.<Clients Characterset> NLS_Language 指定: - Oracle(错误)信息的语言 - 日和月份的名称 注意:NLS_LANGUAGE与插入和查询的*数据*的语言无关。
    NLS_Territory 指定: - 货币和数字格式 - 计算星期和天数的范围和惯例
    客户端字符集(CLIENTS CHARACTERSET): - 定义Oracle客户端,客户应用使用的编码 * 或者它要符合您Microsoft Windows代码页 (GUI工具的ACP, 命令提示符的CHCP 值) * 或者为Unicode WIN32应用设置为UTF8/AL32UTF8。
     
     
    Windows中设置NLS_LANG
    1.命令提示符中设置为环境变量
    如果您在命令行中设置NLS_LANG为环境变量,它将覆盖注册表和系统属性中的NLS_LANG的定义。在命令提示符中,使用“set”命令,例如:
     
    LANGUAGE设置为中文时,提示如下:
    C:UsersTianPan>set nls_lang=SIMPLIFIED CHINESE_CHINA.ZHS16GBK
     
    C:UsersTianPan>sqlplus /nolog
    SQL*Plus: Release 11.2.0.1.0 Production on 星期五 11月 28 10:07:21 2014
    Copyright (c) 1982, 2010, Oracle.  All rights reserved.
    SQL> conn scott/tiger 已连接。
    SQL> select sysdate from dual;
    SYSDATE -------------- 28-11月-14
     
    当Language设置为American时,提示信息则变为英文:
    C:UsersTianPan>set nls_lang=AMERICAN_AMERICA.ZHS16GBK
     
    C:UsersTianPan>sqlplus /nolog
    SQL*Plus: Release 11.2.0.1.0 Production on Fri Nov 28 10:07:51 2014
    Copyright (c) 1982, 2010, Oracle.  All rights reserved.
    SQL> conn scott/tiger Connected. SQL> select sysdate from dual;
    SYSDATE ------------ 28-NOV-14
    在Windows下通过set nls_lang来设置,只是Session级别的,关闭cmd窗口后再打开,就又变为原来的设置了。如需永久生效,可以修改注册表的参数。
     
    2.注册表设置(永久生效)
    默认情况下,windows上的Oracle安装使用注册表来定义这个设置。 版本 10g 及以上: HKEY_LOCAL_MACHINESOFTWAREORACLEKEY_<oracle_home_name> 这里您会看到一个条目名为NLS_LANG
    在64位windows平台上安装32位软件,会使用32位兼容性路径 HKEY_LOCAL_MACHINESOFTWAREWow6432NodeORACLEKEY_<oracle_home_name>
     
    3.操作系统环境变量
    尽管注册表是Microsoft Windows设置的主要存储位置,它不是唯一可以设置参数的地方。
    虽然不推荐,但您可以设置NLS_LANG为系统属性中的系统或者用户变量。这个设置会被所有Oracle home使用。
    设置位置: '我的电脑' -> '属性' > '高级'  -> '环境变量'
     
    因为这些环境变量比注册表中已经设置的参数级别高,所以除非您有非常好的理由否则不要在这个位置设置Oracle参数。
     
    Linux/Unix下的设置
    export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
    export NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK
     
    DB中的NLS_LANG DB也有自己的NLS_LANG参数,来标识数据库的语言,地域,字符集。可以通过以下的SQL来查得, SELECT * FROM v$nls_parameters;  OR SELECT USERENV ('language') FROM DUAL;
    客户端的NLS_LANG和DB的NLS_LANG DB的NLS_LANG和客户端环境变量中NLS_LANG尽可能的保持一致。Setting the NLS_LANG Environment Variable for Oracle Databases 提供了如何保持一致的方法。 那么为什么要保持一致呢?那是因为如果字符集不匹配,有可能在DB和Client间相互转换的过程中,出现字符转换错误的情况。比如Oracle nls_lang tips中举的例子。
    更详细的内容可以参考下边这些材料:
    Microsoft Windows 环境中NLS_LANG的正确设置 (Doc ID 1577370.1)
    在 Unix 环境中正确设置 NLS_LANG (Doc ID 1548858.1)
    NLS_LANG Explained (How does Client-Server Character Conversion Work?) (Doc ID 158577.1)
  • 相关阅读:
    进程池,线程池,协程,gevent模块,协程实现单线程服务端与多线程客户端通信,IO模型
    线程相关 GIL queue event 死锁与递归锁 信号量l
    生产者消费者模型 线程相关
    进程的开启方式 进程的join方法 进程间的内存隔离 其他相关方法 守护进程 互斥锁
    udp协议 及相关 利用tcp上传文件 socketserver服务
    socket套接字 tcp协议下的粘包处理
    常用模块的完善 random shutil shevle 三流 logging
    day 29 元类
    Django入门
    MySQL多表查询
  • 原文地址:https://www.cnblogs.com/justuntil/p/5636574.html
Copyright © 2020-2023  润新知