오라클 데이터 길이 - olakeul deiteo gil-i

오라클 데이터 길이 - olakeul deiteo gil-i

LENGTH / LENGTHB

LENGTH(길이) / LENGTHB(바이트크기)

- 주어진 컬럼의 문자열(값)의 길이를 반환 (NUMBER/BYTE)

- 컬럼이 CHAR 인 경우 데이터의 길이와 상관없이 컬럼 전체 길이 반환

SELECT LENGTH(ENAME), LENGTHB(ENAME) FROM EMP;

오라클 데이터 길이 - olakeul deiteo gil-i

저는 비교를 위해 ENAME도 같이 불러왔습니다.

LENGTH의 경우 ENAME에 있는 값의 길이를 반환합니다.

LENGTHB의 경우 ENAME에 있는 값의 바이트 값을 반환합니다.

CREATE TABLE TESTLENGTH(
V_ID VARCHAR2(5),
C_ID CHAR(5));

INSERT INTO TESTLENGTH
VALUES('한','글');

오라클 데이터 길이 - olakeul deiteo gil-i

한글은 길이와 바이트의 크기를 어떻게 반환하는지 보기위해 테이블을 만들고 값을 넣어주었습니다.

SELECT V_ID AS "한글VARCHAR2",
C_ID AS "한글CHAR",
LENGTH(V_ID) AS "한글V_LENGTH",
LENGTHB(V_ID) AS "한글V_LENGTHB",
LENGTH(C_ID) AS "한글C_LENGTH",
LENGTHB(C_ID) AS "한글C_LENGTHB"
FROM TESTLENGTH;

오라클 데이터 길이 - olakeul deiteo gil-i

가변 길이 문자열인 VARCHAR2의 경우 길이를 1로 반환합니다.

VARCHAR2에서 한글 1글자의 바이트 크기는 3입니다.

고정 길이 문자열인 CHAR의 경우 길이는 비어있는 공간은 NULL값으로 채웁니다.

TESTLENGTH 테이블에서 길이를 5만큼 잡아줬고 한글은 3칸을 잡아먹습니다.

그리고 비어있는 2개의 공간은 NULL값으로 매꾸게 됩니다. 한글의 길이는 3이 나옵니다.

만약 공간을 10만큼 줬다면 8이 나오겠죠?

또 만약 공간을 10만큼 주고 ‘한글’이라는 값이 있다면 길이는 6이됩니다.

CHAR에서 바이트 크기는 처음 C_ID를 만들 때 정해주었던 크기가 그대로 바이트 크기로 출력됩니다,

오라클 데이터 길이 - olakeul deiteo gil-i

LENGTH, LENGTHB 차이점

오라클에서 문자열에 대해 길이를 가져오는 함수중에 LENGTH, LENGTHB 가 대표적으로 있습니다.

legnth 와 lenthb의 차이점을 알아보겠습니다.

LENGTH(char) : 문자열 길이 반환하는 함수(공백포함)

LENGTH는 순수한 문자열의 길이를 반환합니다.

LENGTHB(char) : 문자열의 byte 반환하는 함수(공백포함)

LENGTHB는 byte단위로 반환해주기 떄문에 한글이 포함되어있는 byte를 반환합니다

※한글 바이트의 경우 DB 캐릭터셋의 방식에 따라 바이트의 수가 달라집니다.

사용하고 있는 DB의 캐릭터셋을 확인하는 방법은 아래쪽에 설명을 따로 하겠습니다.

LENGTH, LENGTHB 예제

WITH TEST_TB AS (
    select '가나다라마' as a
    ,'abcd' as b
    ,'123' as c
    from dual
)
select length(a), lengthb(a), length(b), lengthb(b), length(c), lengthb(c) FROM TEST_TB;
오라클 데이터 길이 - olakeul deiteo gil-i

LENGTH(A) 는 순수한 문자열의 길이인 5가 반환되었습니다.

LENGTHB(A) 는 한글문자열이기 떄문에 길이가 10이 반환되었습니다.(글쓴이의 DB 케릭터셋은 한글 2byte)

LENGTH(B) 는 순수한 문자열의 길이인 4가 반환되었습니다.

LENGTHB(B) 는 한글이 아니여서 문자열의 길이인 4가 반환되었습니다.

LENGTH(C) 는 순수한 문자열의 길이인 3가 반환되었습니다.

LENGTHB(C) 한글이 아니여서 문자열의 길이인 3가 반환되었습니다.

DB 케릭터셋 확인방법

select * from nls_database_parameters where parameter = 'NLS_CHARACTERSET';
오라클 데이터 길이 - olakeul deiteo gil-i

KO16KSC5601

완성형 한글입니다. 가장 많이 사용됩니다.

2,350자의 한글과 4,888자의 한자, 영문, 기호 및 히라가나,가타카나를 표현합니다.(한글 바이트 : 2btye)

KO16MSWIN949

조합형 한글입니다. 완성형을 포함하여 11,172자의 한글을 표현합니다.(한글 바이트 : 2byte)

AL32UTF8

유니코드의 CES중의 한 부분입니다. 11,172자의 한글을 표현합니다.(한글 바이트: 3byte)