Almost-Native

오라클 DB에서 유니코드 UTF-8 코드값으로 한글 출력하기 본문

Java 프로그램 개발, IT

오라클 DB에서 유니코드 UTF-8 코드값으로 한글 출력하기

2020. 12. 12. 10:54

유니코드는 "유니코드 컨소시엄"에서 글로벌하게 모든 글자에 부여한 코드값입니다.

이 안에는 당연히 한글도 들어있죠~

 

아래 출처 사이트로 가면 전체 한글 유니코드 리스트를 볼 수 있습니다.

 

(출처 : https://anow.tistory.com/237)

위 표에서 보면 문자마다 UNICODE 값이 있고, UTF8 코드값이 있는 것을 볼 수 있습니다.

 

'가' 글자에 대한 UNICODE 값은 'AC00' 이고, UTF8 코드값은 '234, 176, 128' 입니다.

'각' 글자에 대한 UNICODE 값은 'AC01' 이고, UTF8 코드값은 '234, 176, 129' 입니다.

 

얘네들을 Oracle Database 내에서 출력하는 방법은 2가지가 있습니다.

 

1) UNICODE 값을 이용하는 방법
2) UTF-8 코드값을 이용하는 방법

 

근데, DB에서 유니코드 값으로 뭔가를 출력할려면, DB가 당연히 유니코드를 지원해야 합니다.

테스트하는 DB의 NLS_LANG 파라메타값이 ~.UTF8 또는 ~.AL32UTF8 처럼 되어 있어야 됩니다.^^

 

SQL> select sys_context('userenv', 'language') from dual;

 

로 확인해 볼 수 있습니다.

 

 

1) UNICODE 값을 이용하는 방법

유니코드값을 이용하는 경우에는 아주 쉽습니다. 오라클에서 제공하는 unistr() 함수를 사용하기만 하면 됩니다.

 

unistr() 함수에 인자로 유니코드값을 넣을때 앞에 역슬래시('\') 를 붙여줘야 합니다.

대소문자는 상관없습니다.

 

2) UTF-8 코드값을 이용하는 방법

UTF-8 코드값을 이용하는 경우는 좀 복잡합니다.

한방에 출력해주는 함수가 없어서 to_char(), to_number(), chr() 의 3개의 함수를 조합해야 합니다.

 

먼저, '234, 176, 128' 이 3개의 십진수값인데, 이걸 각각 16진수값으로 변환하기 위해 to_char(234, 'xx') 와 같이 호출합니다.

to_char() 함수 2번째 인자로 'xx' 포맷을 넣어주면 10진수를 16진수로 출력해줍니다.

 

여기에서 나온 3개의 16진수값을 모두 붙여서 하나로 만들어야 하는데, 이때 공백이 들어가 있어서 trim() 으로 제거해줘야 합니다.

 

이렇게 공백없이 하나로 합쳐진 16진수 값을 10진수값으로 다시 변환해줘야 합니다.

to_number() 함수를 사용하고, 두번째 인자로 'xxxxxxxx' 를 넣어주면 됩니다.

 

이렇게 나온 십진수 값을 chr() 함수에 넣어주면 드디어 한글 '가' 글자가 출력됩니다.

 

Comments