오라클에서 당연하게도 한글은 영어와 바이트가 다르다. 사용하는 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는 문자열의 바이트를 계산하는식의 차이가 있음을 알 수 있다.
'2.2 DB > ORACLE' 카테고리의 다른 글
[Oracle PL/SQL] PL/SQL 기본개념 (0) | 2024.10.21 |
---|---|
[Oracle] 데이터베이스의 문자 집합 확인하기 (0) | 2024.10.18 |
[Oracle] 숫자,문자 자르기 함수 (SUBSTR) (0) | 2024.10.17 |
[Oracle] 문자 채우기 (LPAD, RPAD) +응용 (0) | 2024.10.17 |
[Oracle] CLOB과 BLOB의 정의 (0) | 2024.10.11 |
댓글