728x90

아래 내용은 DB2 10.5 환경의 UTF-8 코드셋 데이터베이스를 기준으로 합니다.

(eucKR 코드셋에서도 비슷하게 작동할 것으로 보입니다만 테스트가 필요합니다)

DB2에서 멀티바이트 문자에 LENGTH 함수를 사용하면 바이트 값을 리턴합니다.


UTF-8 인코딩에서 한글은 일반적으로 3바이트로 표현됩니다. (가 : ea b0 80)

DB2의 LENGTH 함수에서는 3을 리턴합니다.


10.5버전부터 LENGTH2, LENGTH4 와 같은 스칼라 함수를 지원합니다.


$ db2 "values length('가')"


1

-----------

          3


  1 record(s) selected.


$ db2 "values length2('가')"


1

-----------

          1


  1 record(s) selected.


$ db2 "values length4('가')"


1

-----------

          1


위와 같이 DB2의 LENGTH 함수 실행결과에서는 순수하게 바이트 길이를 표시해주고 length2 와 length4는 멀티바이트에 대응한 글자길이를 보여주게 됩니다.10.5 이전 버전에서는 character_length (또는 length) 함수에서 codeunits16, codeunits32 와 같은 인자값을 지정하여 사용했습니다. 유니코드의 경우 보통 3바이트로 표현하나 4바이트로 표현하는 문자도 아주 간혹 있어서 이같은 경우에는 codeunit32를 사용할 필요도 있습니다. 그러나 한글의 경우에는 4바이트로 표현하는 예는 없는 것 같습니다. 이에 대해 아시는 바가 있다면 알려주시기를 부탁드립니다.


참조. 오라클 작동방식 (11.2 버전 기준)

오라클의 경우 LENGTH 함수 실행결과 글자길이값을 보여줍니다. 오라클에서도 LENGTH2, LENGTH4 함수가 있는데 역시 DB2와 동일하게 작동합니다. 원래는 ORACLE함수이나 DB2에서도 호환성 측면에서 추가된 것으로 보입니다. 유니코드 캐릭터셋의 DB에서는 LENGTH4 함수가 LENGTH와 동일한 결과값을 보여줍니다. (기타 캐릭터셋에서는 확인이 필요합니다)


# export LANG=KO_KR.UTF-8

# export NLS_LANG=NLS_LANG=AMERICAN_AMERICA.AL32UTF8

# sqlplus scott/tiger


SQL> create table utftest (a varchar(100));


Table created.


SQL> insert into utftest values ('한?글');


1 row created.


SQL> select * from utftest;


A

--------------------------------------------------------------------------------

한?글


SQL> select length(a) from utftest;


 LENGTH(A)

----------

         3


SQL> select length2(a) from utftest;


LENGTH2(A)

----------

         4


SQL>  select length4(a) from utftest;


LENGTH4(A)

----------

         3


SQL> insert into utftest values ('a한?글b');


1 row created.


SQL> select * from utftest;


A

--------------------------------------------------------------------------------

한?글

a한?글b


SQL> select length(a) from utftest;


 LENGTH(A)

----------

         3

         5


SQL> select length2(a) from utftest;


LENGTH2(A)

----------

         4

         6


SQL> select length4(a) from utftest;


LENGTH4(A)

----------

         3

         5



참조

http://www.utf8-chartable.de/unicode-utf8-table.pl

http://www.ibm.com/developerworks/data/library/techarticle/dm-0705nair/

728x90

+ Recent posts