3,126
yesterday 1,791
visitor 24,292,056
70

NLS_LANG 정리

조회 수 168591 추천 수 0 2011.10.20 15:31:24

NLS_LANG 정리

DB : SELECT SYS_CONTEXT('USERENV','LANGUAGE') "NLS SET" from dual;

reg : HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE/KEY불라불라..   : 문자열 NLS_LANG

NLS_LANG 

1. KOREAN_KOREA.KO16MSWIN949

2. AMERICAN_AMERICA.WE8MSWIN1252

3. KOREAN_KOREA.UTF8

......

 


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

 

 

출처 : http://sjh7622.blog.me/138432296

 

 

 

'헬로마켓'과 함께하는 스마트한 중고 아이템 거래

https://www.hellomarket.com

문서 첨부 제한 : 0Byte/ 2.00MB
파일 제한 크기 : 2.00MB (허용 확장자 : *.*)
List of Articles
번호 제목 글쓴이 날짜 조회 수sort

Program Note 로그인 :)