본문 바로가기
[개발] Programming/Database

오라클 한글 바이트 수 조회 (length, lengthb 차이점)

by eatyourKimchi 2024. 2. 15.

 

 오라클에서 한글 바이트 수를 구해야 될 케이스가 발생합니다. 이때 오라클 내장 함수로 체크할 수 있는 방법이 있어 소개해 드리겠습니다. 참고로 오라클에서 인식하는 한글이나 다국어(영어가 아닌)의 바이트 수는 UTF-8, UTF-16, EUC-KR 등의 인코딩 방식에 따라 달라집니다.

 

때문에 DB 컬럼 사이즈가 동일해도 인코딩 방식에 따라 저장할 수 있는 글자수가 달라지게 됩니다.

 

 

 

 

 

확실하게 저장 가능한 한글 수를 체크하려면 바이트를 직접 비교하면 되는데,

이때 오라클 내장함수 lengthB() 를 사용하면 됩니다.

length()는 단순히 글자수만 반환하기 때문에 부정확합니다.

 

1
2
3
4
SELECT LENGTH('한국 서울')  AS 한글_LENGTH,
       LENGTHB('한국 서울') AS 한글_LENGTHB
 FROM DUAL
;
cs

 

 

결과를 보면 아래와 같이 lengthB()으로 원하는 값을 구했습니다.

 

 

 

만약 length()로 길이를 구하여 5를 리턴 받았고,

인코딩 방식을 고려하지 않고 곱하기 2로 10자로 계산해 버리면,

인코딩 방식에 따라 저장할 때 오라클 익셉션이 발생할 것입니다.

때문에 한글은 바이트 수를 계산하여 검증을 하는 게 좋습니다.

 

 

참고로 영어는 어느 인코딩 방식에서나 2 바이트로 계산됩니다~!

 

1
2
3
4
SELECT LENGTH('Korea Seoul')  AS 한글_LENGTH,
       LENGTHB('Korea Seoul') AS 한글_LENGTHB
 FROM DUAL
;
cs

 

 

 

댓글