IT/프로그래밍
[ORACLE] 한글 3BYTE인데, 2BYTE 기준으로 길이맞추기. LENGTHB 사용
은그램
2020. 11. 8. 11:22
728x90
반응형
오라클에서 어떤 포맷을 사용하느냐에 따라서
한글이 3BYTE로 인식되기도, 2BYTE로 인식되기도 한다.
나의 경우,
UTF-8 타입을 사용중이어서 3BYTE로 인식되고 있었다.
600 BYTE로 잘라서 보내야되는 데이터가 있었는데,
RPAD를 이용하여 600으로 맞췄음에도 데이터 차이가 있었다.
RPAD/LPAD를 사용할 때에는 한글을 2BYTE로 인식하고 있었다.
SELECT RPAD('오라클', 10, '1') FROM DUAL
출력 >> 오라클1111
데이터가 몇 바이트인지 확인하기 위해서는 LENGTHB 함수를 사용해야 하는데,
이 경우에 LENGTHB를 하면, 13이 나오게 되는 것이었다.
이를 어떻게 처리해야하나 🤔,
CONVERT 함수를 사용해서 한글포맷을 변경해서 길이를 구하면 된다.
+ 600에 맞춰서 데이터를 추출해야했기 때문에,
SUBSTR을 아래와 같이 함께 사용해서 처리하게 되었다.
SELECT
CASE WHEN LENGTHB(CONVERT(RPAD('오라클', 10, '1'), 'KO16MSWIN949')) > 10
THEN SUBSTR(RPAD('오라클', 10, '1'), 0, LENGTH(RPAD('오라클', 10, '1')) - LENGTHB(CONVERT(RPAD('오라클', 10, '1'), 'KO16MSWIN949')) - 10 ))
ELSE RPAD('오라클', 10, '1') END
FROM DUAL;
728x90
반응형