반응형
select * from nls_database_parameters where parameter like '%CHARACTER%';
OR
select * from v$nls_parameters where parameter like '%CHARACTER%';
NLS_CHARACTERSET 확인.

한글 byte 수 확인.
select lengthb('아') from dual;


KO16KSC5601 : 한글 2byte

한글 완성형 코드와 일치.
2350자의 한글을 25*94 매트릭스에 배열한 문자셋.
4888자의 한자와 히라카나, 카타카나, 그리고 영문 및 각종 기호들을 포함.
유닉스 환경에서는 LANG=ko로 하여 DBCA(Database Configuration Assistant)를 실행할 경우, 자동으로 캐릭터셋을 KO16KSC5601로 지정
아햏햏, 먄하다, 솔믜, 커피숖, 똠방각하 등의 문자는 입력이 제대로 안됨.


KO16MSWIN949 : 한글 2byte

마이크로소프트사의 Windows Codepage 949번, 즉 한글 코드 페이지를 따른 코드셋.
이는 완성형(KO16KSC5601)을 그대로 포함하고 있으며, 추가로 현대 한글 조합으로 표현할 수 있는 모든 가짓수에 해당하는 8822자의 한글을 추가해 포함하고 있다. 그러니까 "Windows-949 캐릭터셋은 KSC5601의 수퍼셋(Superset)"이 되며, 따라서 "KO16MSWIN949 또한 KO16KSC5601의 수퍼셋"이 된다.

"다른 운영 체제에서도 사용할 수 있다!"
운영 체제가 Windows 949 코드 페이지를 지원하지 않는다고 해서, KO16MSWIN949 캐릭터셋을 가진 데이터베이스 인스턴스를 생성할 수 없다는 것은 아니다. 데이터베이스 캐릭터셋과 운영체제의 캐릭터셋은 전혀 별개라고 인식해야 한다. 비록 Windows-949는 특정 업체의 문자셋이기는 하지만, 이를 기반으로 한 KO16MSWIN949 캐릭터셋은 한글 2350자의 한계를 가진 KO16KSC5601의 대안으로 용이하게 이용될 수 있다. 기억하자.
Unix에서든 Linux에서든, KO16MSWIN949 캐릭터셋을 가진 데이터베이스 인스턴스를 생성할 수 있다. 


UTF8/AL32UTF8 : 한글 3byte

UTF8은 유니코드를 구현한 캐릭터셋 중에 가변길이 인코딩 방식을 택하고 있는 캐릭터셋이다.
한 글자를 표현하는데 필요한 바이트의 길이가 최대 3바이트(AL32UTF8의 경우 6바이트)까지 늘어날 수 있다.

유니코드는 현대 한글 11172자를 모두 가나다 순으로 잘 정렬된 상태로 포함하고 있다.
그래도 한글 한 자가 3바이트의 물리적 공간을 차지하므로, 오로지 모든 한글을 지원한다는 이유만으로 사용하는 것은 곤란하다. 하지만, 한글 이외에도 다른 언어들을 함께 데이터베이스에 저장해야 한다면 다른 선택의 여지가 없는 유일한 선택이 된다.


National Characterset

네셔널 캐릭터셋은 유니코드를 지원하지 않는 캐릭터셋을 가진 데이터베이스에서 유니코드를 지원하기 위해 부가적으로 설정할 수 있는 캐릭터셋이다. 즉, 하나의 데이터베이스 인스턴스는 "캐릭터셋"과 "네셔널 캐릭터셋"을 가진다. 처음 시스템 구축 당시와는 달리, 한글 이외의 다른 언어를 급히 저장해야 할 필요성이 있는 경우 네셔널 캐릭터셋을 적절히 활용할 수 있다.

네셔널 캐릭터셋을 가능한 캐릭터셋은 단 두 가지이다. UTF8과 AL16UTF16(기본값).
네셔널 캐릭터셋을 사용하기 위해서는 특정 타입으로 테이블의 컬럼 또는 PL/SQL 변수를 선언해야 한다. CHAR와 VARCHAR2,CLOB에 대응되는 네셔널 캐릭터셋 기반의 타입으로는 NCHAR, NVARCHAR2,NCLOB이 있다.

즉, KO16MSWIN949 데이터베이스에서 다음과 같이 테이블을 생성할 경우,

CREATE TABLE test_table
( varchar_value VARCHAR2(2000),
nvarchar_value NVARCHAR2(2000)
);
"varchar_value" 컬럼에는 KO16MSWIN949에 속하는 글자들만 저장할 수 있는 반면, nvarchar_value 컬럼에는 유니코드에 속한 모든 글자들을 저장할 수 있다.


캐릭터셋 선택의 원칙
한글 지원을 위해서는 반드시 위의 네 가지 캐릭터셋 중에 하나를 선택해야 한다

한국에서만 사용하는 시스템이라면 KO16MSWIN949를 선택한다
한국어 뿐 아니라 중국어, 일본어, 러시아어 등 다양한 언어로 된 데이터를 저장해야 한다면 UTF8, AL32UTF8을 선택한다. 인코딩 변환으로 한국어 기반의 캐릭터셋에 비해 속도의 저하가 있다고 알려져 있다.
대부분이 한글이며, 일부 외국어가 필요하다면, 한국어 기반의 캐릭터셋(KO16MSWIN949)을 사용하되, National Characterset을 이용한 컬럼에 외국어를 저장한다.


NLS_LANG 변수 값 설정
한글을 지원하는 데이터베이스와 통신한다면 반드시 NLS_LANG값을 설정해야 한다.
 NLS_LANG=[언어]_[영역].[캐릭터 셋]

Windows 운영체제에서 한국어 환경을 사용하는 사용자들은 다음과 같이 NLS_LANG 값을 설정할 수 있다.
KOREAN_KOREA.KO16MSWIN949

유닉스 운영체제에서 한국어를 입출력한다면 다음과 같이 NLS_LANG을 설정할 수 있다.
KOREAN_KOREA.KO16KSC5601


참조 Link : http://dba.pe.kr/1524
반응형

'Database > Oracle' 카테고리의 다른 글

NLS 파라미터 확인  (0) 2020.11.17
JDBC 오류?? varchar 에 2000byte 이상 insert 하기.  (0) 2011.11.07
오라클 구동 방법  (0) 2011.01.05
[Link] hierarchy query  (0) 2010.11.09
[오라클] 버전 확인.  (0) 2009.08.31

+ Recent posts