아래 내용은 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
참조. 오라클 작동방식 (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/