Oracle과 한글 그리고 UTF-8


US7ASCII

라클 DB를 사용하는 곳을 보면 아직도 US7ASCII을 Character Set으로 사용하는 곳이 많이 있는 곳으로 알고 있다.
언뜻 보기에는 US7ASCII도 한글을 지원하는 것처럼 보이지만, 사실은 한글이 저장되는 것이 아니고, 한글을이진코드 형태로
변환하여 저장 및 출력하는 형태다.
 
한글을 지원하는 Character Set
현재까지 오라클 DB에서 한글을 사용하려면 Character Set을 “KO16KSC5601”, “KO16MSWIN949”, “UTF8”, “AL32UTF8″만 사용할 수 있다.
 
KO16KSC5601
한글 완성형 코드와 일치하며 일반적으로 많이 사용되는 2350자의 한글, 4888자의 한자와 히라카나, 카타카나, 그리고 영문 및 각종 기호들을 포함하고 있다.
 
KO16MSWIN949
Windows-949
Character Set은 MS사의 Windows Codepage 949번, 즉 한글 코드 페이지를 따른 코드셋이다. 이는
완성형(KO16KSC5601)을 그대로 포함하고 있으며, 추가로 현대 한글 조합으로 표현할 수 있는 모든 가짓수에 해당하는
8822자의 한글을 추가해 포함하고 있다. 그러니까 “Windows-949 Character Set은 KSC5601의
수퍼셋(SuperSet)”이 되며, 따라서 “KO16MSWIN949 또한 KO16KSC5601의 수퍼셋”이 된다.
 
UTF8/AL32UTF8
UTF8
은 유니코드를 구현한 Character Set 중에 가변결이 인코딩 방식을 택하고 있는 Character Set이다. 가변 길이를
위해 일종의 플래그 비트를 각 바이트마다 포함시켜야 하다보니, 한 글자를표현하는데 필요한 바이트의 길이가 최대
3바이트(AL32UTF의 경우 6바이트)까지 늘어날 수 있다.
 
한글지원 Character Set 비교표
                        KO16KSC5601         KO16MSWIN949        UTF8                 AL32UTF8
한글지원 상태        2350자                   11172자                11172자                11172자
캐릭터셋/인코딩   한글완성형             한글조합형      8.1.6이전:Unicode 2.1  9iR1 : Unicode 3.0
버전                                                                     8.1.7이후:Unicode 3.0 9iR2 : Unicode 3.1
                                                                                                          10gR1 : Unicode 3.2
                                                                                                          10gR2 : Unicode 4.0
한글바이트              2Bytes                  2Bytes                  3Bytes                  3Bytes
지원버전                 7.x                      8.0.6 이상               8.0이상                  9iR1이상
National Char-        불가능                  불가능                   가능                      불가능
acterSet으로
설정 가능 여부
 
National CharacterSet
National CharacterSet은 유니코드를 지원하지 않는 CharacterSet을 가진 데이터베이스에서 유니코드를 지원하기 위해 부가적으로 설정할 수 있는 CharacterSet이다.
즉,
하나의 데이터베이스 인스턴스는 “CharacterSet”과 “National CharacterSet”을 가진다. 처음 시스템
구축 당시와는 달리, 한글 이외의 다른 언어를 급히 저장해야 할 필요성이 있는 경우 National CharacterSet을
적절히 활용할 수 있다.
National CharacterSet이 가능한 CharacterSet은 단 두가지로, UTF8과 AL16UTF16(기본값)이다.
Nation
CharacterSet을 사용하기 위해서는 특정 타입으로 테이블읠 컬럼 또는 PL/SQL 변수를 선언해야 한다. CHAR와
VARCHAR2, CLOB에 대응되는 National CharacterSet 기반의 타입으로는 NCHAR, NVARCHAR2,
NCLOB이 있다.
즉, KO16MSWIN949 데이터베이스에서 다음과 같이 테이블을 생성할 경우,
                 Create Table test_table (
                      varchar_value VARCHAR2(2000),
                      nvarchar_value NVARCHAR2(2000) );
“varchar_value”
컬럼에는 KO16MSWIN949에 속하는 글자들만 저장할 수 있는 반면, nvarchar_value 칼럼에는 유니코드에 속한
모든 글자들을 저장할 수 있다. 약간의 부가적인 코드가 필요할 뿐 실제 프로그래밍 방식은 거의 동일한다.
 
CharacterSet 선택의 원칙
– 한글 지원을 위해서는 반드시 위의 네가지 CharacterSet 중에 하나를 선택해야 함
– 한국에서만 사용하는 시스템이라면 KO16MSWIN949를 선택한다.
– 한국어뿐 아니라 중국어, 일본어, 러시아어 등 다양한 언어로 된 데이터를 저장해야 한다면
   UTF8, AL32UTF8을 선택한다. 인코딩 변환으로 한국어 기반의 CharacterSet에 비해 속도의 저하가
   있다고 알려져 있음
– 대부분이 한글이며, 일부 외국어가 필요하다면, 한국어 기반의 CharacterSet(KO16MSWIN949)을
   사용하되, National CharacterSet을 이용한 칼럼에 외국어를 저장한다.

You may also like...

1 Response

  1. 2013-03-28

    그누보드란 회원관리, 게시판, 설문조사, 접속자현황 기능등의 홈페이지 제작에필요한 대부분의 기능을 포함하고있는 툴입니다. 이 프로그램은 그누보드를 쓰면서 웹문서를 자동으로 글을 등록하고자 하는데 쓰이는 프로그램입니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다