NLS_LANG 정리

출처: http://blog.naver.com/darkturtle/50070277845

 

NLS_LANG 정리

NLS_LANG =   [언어]_[영역].[캐릭터셋]
             <language>_<Territory>.<client characterset>
    ex) AMERICAN_ARERICA.KO16KSC5601, AMERICAN_AMRRICA.UTF8
  ● <Territory> – 영역정보, 달력 설정 방법, 통화기호(달라), 숫자그룹
                   날짜 포맷(한국 – “05/08/12 오후 07:28:03”, 체코 – “10.08.05 19:28:03”)
                   Language 값만 설정하면, Language 값을 따른다. ( AMERICAN ==> AMERICA )

  ● <language> – 캐릭터셋, 정렬방식, 날짜 표기에 사용되는 기호(년/월/일, YYYY/MM/DD)  
                  Default 값은 AMERICAN 이다.
                  실제 날짜 표기(TO_CHAR,TO_DATE 실행시 – 월요일, MON 으로 표시를 좌우하는
                  NLS_DATE_FORMAT 값은 NLS_LANGUAGE 을 따른다. [하단.  테스트 1 참조 ]

  ● <client characterset>
    ◇ 기본적으로 Server characterset 과 동일하게 설정된다.
    – 클라이언트에서 캐릭터셋만 설정하면, 디폴트로 AMERICAN_AMERICA 로 Territory_language 값이 설정된다.
    ◇ Client Characterset 을 Server 와 다르게 설정 상태에서,
      SQL> SELECT SYS_CONTEXT(‘USERENV’,’LANGUAGE’) “NLS SET” from dual;
      을 실행 하여도, 항상 CharacterSet 은 항상 서버 CharacterSet 값을 가져온다.
    ◇ client characterset을 서버와 다르게 하는 경우는 크게
      1. 다른 캐릭터셋 DB로 데이타 이전시(EXPORT/IMPORT)
         △  EXPORT/IMPORT 시에는 반드시 서버의 Character Set 동일하게 설정 후 Export/Import 한다.
         △  다른 캐릭터셋의 DB(데이타가 깨지지 않고, 지원되는 경우, SubSet Characterset 일경우)로 IMPORT 시에는
           Import 대상의 DB 캐릭터셋으로 환경 설정 후, Export/Import 한다.
      2. Server(UTF8) – Client(KO16KSC5601)
         △ 다국어 지원되는 데이타베이스에다 한글 입출력 하기 위해서는
            입력시 – 내가 입력 하는 데이타의 캐릭터셋이 한글임을 알리기 위해서,
            출력시 – Unicode 의 Data를 한글로 표현해 달라고 하기 위해서
            지금까지 DB 가 UTF8 이면, Client 도 UTF8 로 설정하면 되는 줄 알았는데. 아니네요 ㅡ_ㅡ;

     ◇ NLS_LANG 지정 방법
     1. SESSION LEVEL
      – 가장 우선 된다.
      – select * from nls_session_parameters 를 통해서 확인 가능
      – 변경 방법1.
      — 확인
      SQL> select * from nls_session_parameters
           where PARAMETER in  (‘NLS_LANGUAGE’,’NLS_TERRITORY’,’NLS_DATE_FORMAT’,’NLS_DATE_LANGUAGE’,’NLS_SORT’);

                  PARAMETER                      VALUE
          —————————— —————————————-
          NLS_LANGUAGE                   AMERICAN
          NLS_TERRITORY                  AMERICA
          NLS_DATE_FORMAT                DD-MON-RR
          NLS_DATE_LANGUAGE              AMERICAN
          NLS_SORT                       BINARY
      SQL> SELECT SYS_CONTEXT(‘USERENV’,’LANGUAGE’) “NLS SET” from dual;
     
      NLS SET
      ——————————————————————————–
      AMERICAN_AMERICA.US7ASCII
         
        — 변경  
        SQL> ALTER SESSION SET NLS_LANGUAGE=’KOREAN’;
       
        Session altered.
        — 변경 확인
        SQL>  select * from nls_session_parameters
        where PARAMETER in  (‘NLS_LANGUAGE’,’NLS_TERRITORY’,’NLS_DATE_FORMAT’,’NLS_DATE_LANGUAGE’,’NLS_SORT’);
         
          PARAMETER                      VALUE
          —————————— —————————————-
          NLS_LANGUAGE                   KOREAN
          NLS_TERRITORY                  AMERICA
          NLS_DATE_FORMAT                DD-MON-RR
          NLS_DATE_LANGUAGE              KOREAN
          NLS_SORT                       BINARY

        SQL> SELECT SYS_CONTEXT(‘USERENV’,’LANGUAGE’) “NLS SET” from dual;
     
        NLS SET
        —————————————————————————————
        KOREAN_AMERICA.US7ASCII

      – 변경 방법2.
        UNIX, WINDOWS 에서 NLS_LANG 값을 변경한다.
     ◇ UNIX – export NLS_LANG=American_America.US7ASCII 설정
     ◇ Windows – SET NLS_LANG=American_America.US7ASCII 설정
     ◇ NLS_LANG 잘못 지정시
             NLS_LANG 을 잘못 지정시 sqlplus 실행시 오류 발생 [ I 가 하나 빠짐 ]
             export NLS_LANG=American_America.US7ASCI
             sqlplus scott/tiger
             SQL*Plus: Release 8.1.7.0.0 – Production on Thu Jun 4 18:00:25 2009
             (c) Copyright 2000 Oracle Corporation.  All rights reserved.
             ERROR:
             ORA-12705: invalid or unknown NLS parameter value specified
      –
                     
   2. INSTANCE LEVEL
    – SELECT * FROM NLS_INSTANCE_PARAMETERS ; 를 통해서 확인 가능
    – SELECT NAME, VALUE FROM V$PARAMETER WHERE NAME LIKE ‘%nls%’; 를 통해서 확인 가능
      [ NLS_INSTANCE_PARAMETER 에서 값을 가져온다. ]

   3. DB LEVEL
    – SELECT * FROM NLS_DATABASE_PARAMETERS ; 를 통해서 확인 가능
    – SELECT NAME, VALUE$ FORM SYS.PROPS$ WHERE NAME LIKE ‘%NLS%’ ; 를 통해서 확인 가능
      [ NLS_DATABASE_PARAMETERS 에서 값을 가져온다. ]
    – SELECT * FROM V$NLS_PARAMETERS 를 통해서 확인 가능      
      [ NLS_DATABASE_PARAMETERS 에서 값을 가져온다. ]    
    –      

[테스트 1]
— NLS_LANGUAGE 을 변경하고, DATE TYPE 의 데이타를 TO_CHAR 함수를 통해서 조회한다.
— NLA_LANGUAGE, 엄밀히 말해서 NLS_DATE_LANGUAGE 값이 적용되는 것은
— 요일 정보가  월요일, MON 으로 표기 되는 경우는 TO_CHAR,TO_DATE 사용 시에만 적용됩니다.
— 현재 NLS_LANGUAGE 및 NLS_DATE_LANGUAGE 체크  
select * from nls_session_parameters
where PARAMETER in  (‘NLS_LANGUAGE’,’NLS_TERRITORY’,’NLS_DATE_FORMAT’,’NLS_DATE_LANGUAGE’,’NLS_SORT’);

—  NLS_LANGUAGE        AMERICAN
—  NLS_TERRITORY        AMERICA
—  NLS_DATE_FORMAT        DD-MON-RR
—  NLS_DATE_LANGUAGE    AMERICAN
—  NLS_SORT            BINARY

—  Client NLS_LANG Setting 값 없이 Database 에 Login 하면,
—  DB Creation 시의 Default 값이, 즉 NLS_LANGUAGE[AMERICAN],NLS_TERRITORY[AMERICA] 값을 가지게 된다.
—  또한 NLS_DATE_LANGUAGE[AMERICAN] 값은 특별히 지정하지 않는 경우 ,
—  NLS_LANGUAGE[AMERICAN] 값을 상속한다.

— 데이타 조회(변경 없음)
SELECT HIREDATE FROM SCOTT.EMP WHERE  EMPNO = 7369 ;
— 1980/12/17 00:00:00
— TO_CHAR 를 사용해서 데이타 조회, DEC !!
SELECT TO_CHAR(HIREDATE,’YYYYMONDD’) FROM SCOTT.EMP WHERE  EMPNO = 7369 ;
— 1980DEC17

— NLS_LANGUAGE 값을 KOREAN 으로 변경
ALTER SESSION SET NLS_LANGUAGE=’KOREAN’;
select * from nls_session_parameters
where PARAMETER in  (‘NLS_LANGUAGE’,’NLS_TERRITORY’,’NLS_DATE_FORMAT’,’NLS_DATE_LANGUAGE’,’NLS_SORT’);

–NLS_LANGUAGE        KOREAN
–NLS_TERRITORY        AMERICA
–NLS_DATE_FORMAT   DD-MON-RR
–NLS_DATE_LANGUAGE    KOREAN
–NLS_SORT            BINARY
===> NLS_LANGUAGE 값이 KOREAN 으로 변경되면, NLS_DATE_LANGUAGE 값도 KOREAN 으로 변경된다.

— 데이타 조회(변경 없음)
SELECT HIREDATE FROM SCOTT.EMP WHERE  EMPNO = 7369 ;
— 1980/12/17 00:00:00
— TO_CHAR 를 사용해서 데이타 조회, 12월
SELECT TO_CHAR(HIREDATE,’YYYYMONDD’) FROM SCOTT.EMP WHERE  EMPNO = 7369 ;
— 198012월17

You may also like...

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 항목은 *(으)로 표시합니다