본문 바로가기
2.2 DB/ORACLE

[Oracle] 글자의 바이트(byte)알려주는 함수 (VSIZE, LENGTHB) feat. 한글 바이트 확인 +두 함수 차이점

by Dohi._. 2024. 10. 18.
728x90

오라클에서 당연하게도 한글은 영어와 바이트가 다르다. 사용하는 Charater Set마다 다르다 (2~3Btye)

 

매번 Charater Set를 조회할 수는 없으니까 간단하게 글자의 바이트를 알려주는 함수를 알아보자

 

  • VSIZE
    • 사용법 VSIZE(data) 
    • 내부에서 사용되는 바이트(Byte)의 수를 반환
    • 즉, 문자열뿐만 아니라 BLOB, CLOB 등 다양한 데이터 유형에 대해 사용 가능합니다.
  • LENGTHB
    • 사용법 LENGTHB(문자열) 
    • 주어진 문자열의 바이트 수를 반환
    • 즉, VARCHAR2, CHAR, NCHAR 등의 문자열 데이터 유형에 사용됩니다.

둘의 차이점은  LENGTHB는 LENGTH의 바이트반환이기 때문에 문자열을 넣어야 합니다.

 

설명은 예시를 한번보고 해보겠습니다

SELECT LENGTHB('dohi') -- 영어(LENGTHB)
	 , VSIZE('dohi')   -- 영어(VSIZE)
	 , LENGTHB('도히') -- 한글(LENGTHB)
	 , VSIZE('도히')   -- 한글(VSIZE)
	 , LENGTHB(0123)   -- 숫자(LENGTHB)
	 , VSIZE(0123)     -- 숫자(VSIZE)
  FROM dual;

 

 

1) 영어

 LENGTHB('dohi') -- 영어(LENGTHB)
 VSIZE('dohi')   -- 영어(VSIZE)

영어는 각 1byte

 

2) 한글
 LENGTHB('도히') -- 한글(LENGTHB)
 VSIZE('도히')   -- 한글(VSIZE)

저의 경우는 한글이 2byte을 알수있다(도히 2글자 *2byte = 4byte)

 

3) 숫자 
 LENGTHB(0123)   -- 숫자(LENGTHB)
 VSIZE(0123)     -- 숫자(VSIZE)

숫자의 경우 문자열로

암묵적형변환되기전에 123으로 변환되어서 계산이되었다.

숫자도 1byte임을 알수있다

 

차이점 (날짜)

SELECT TO_CHAR(sysdate)
	 , LENGTHB(sysdate)
	 , VSIZE(sysdate)
  FROM dual;

date의 경우 7byte를 사용한다

년도(2)+ 월(1)+ 일(1)+  시(1)+ 분(1)+ 초(1)  = 7바이트

그런데 LENGTHB의 경우는 8바이트로 나온다 

LENGTHB의경우 암묵적형변환이 되어 문자열로 계산이된다
왼쪽에 TO_CHAR로 본결과 총 8개의 문자로 되어있으며

각 1바이트씩 8바이트임을 알수있다

 

VSIZE는 데이터형에 상관없이 실제 사용하는 바이트를 계산하고

LENGTHB는 문자열의 바이트를 계산하는식의 차이가 있음을 알 수 있다.

728x90

댓글