상세 컨텐츠

본문 제목

TO_MULTI_BYTE(), RPAD() 전각, 전문 채우기

프로그래밍/자바(JAVA)

by dobioi 2013. 8. 17. 13:22

본문

반응형

전문을 만들다 보니, 정해진 BYTE 대로 구성되어야 한다.

게다가 영숫자, 특수문자 등도 전각(2 BYTE)으로 만들어야 한다.

그래서 TO_MULTI_BYTE()를 써서 쿼리를 만들었다.

 

그런데, 이게... 생각과 약간 다르게 나온다.

왜냐하면 RPAD() 와 같이 조합해서 사용했기 때문이다.

그래서 이걸... 여러번의 테스트 끝에 답을 냈다.

 

간단하면서도 (개인적으로) 까다로운 거라...

꼭 공유를 해보고 싶어서 올려보게 된다.

도움되시길...

 

SELECT DUMP(TO_MULTI_BYTE(RPAD('김창완(1)',10))) FROM DUAL;

☞  길이가 14바이트가 나온다.

Typ=1 Len=14: 177,232,195,162,191,207,163,168,163,177,163,169,161,161

 

SELECT TO_MULTI_BYTE(RPAD('김창완(1)',10)) FROM DUAL;

☞ 아래와 같이 14바이트이다.

 123456789 123456789 1234567890

'김창완(1) '

 

SELECT RPAD('김창완',10,' ') FROM DUAL;

☞ 10바이트다.

 123456789 123456789 1234567890
'김창완    '

 

SELECT 10-LENGTH('김창완(1)') FROM DUAL;

☞ 그냥 해봤다. 3바이트다.

 

SELECT LENGTH(TO_MULTI_BYTE('(1)')) FROM DUAL;

☞ 역시 그냥 해봤다. 3바이트다.

 

SELECT TO_MULTI_BYTE(RPAD('김창완(주)밴드',10)) FROM DUAL;

☞ 이게 잘못 생각한 부분이다. 뒤에 "밴드"가 잘려버렸다.

 123456789 123456789 1234567890
'김창완(주)'

 

SELECT LENGTH('김창완(주)밴드') FROM DUAL;

☞ 왜냐하면 이게 8바이트이기 때문이다.

  이렇게 되면 당연이 2바이트가 남기 때문에 모두 다 나와야 맞는데...

  신기하게도 "밴드"가 잘려버리게 된다.

 

  아마도 한 글자가 전각이기 때문에 2바이트로 인식되기 때문이 아닐까?

  그러면 "김창완" = 6바이트, "()" = 2바이트, "주" = 2바이트

  그래서 합이 10바이트가 된다.

 

  뭔가 엇박자가 나는 부분이라 생각된다.

 

SELECT TO_MULTI_BYTE(RPAD('김창완(주)밴드',20)) FROM DUAL;

☞ 28바이트다.  RPAD('김창완(주)밴드',20) = 14바이트('김창완(주)밴드') + 6바이트(SPACE)

 123456789 123456789 1234567890
'김창완(주)밴드      '

Typ=1 Len=28: 177,232,195,162,191,207,163,168,193,214,163,169,185,234,181,229,161,161,161,161,161,161,161,161,161,161,161,161

 

SELECT TO_MULTI_BYTE(RPAD(TO_MULTI_BYTE('김창완(주)밴드'),20)) FROM DUAL;

☞ 24바이트다. 빈칸(SPACE)은 전각이다.

  이걸로 본다면 "김창완(주)밴드"는 각각 2바이트씩 해서 8자이니 16바이트이고,

  빈칸은 "    "로 4자다. 16바이트에서 4바이트를 더한 것이다. 그래서 합이 20....

  그러니... 엇박자가 나는 것이다.

 

 123456789 123456789 1234567890
'김창완(주)밴드    '

Typ=1 Len=24: 177,232,195,162,191,207,163,168,193,214,163,169,185,234,181,229,161,161,161,161,161,161,161,161

 

SELECT RPAD(TO_MULTI_BYTE('김창완(주)밴드'),20) FROM DUAL;

☞ 그래서 결론은 요렇게 해결했다.

 123456789 123456789 1234567890
'김창완(주)밴드  '

Typ=1 Len=20: 177,232,195,162,191,207,163,168,193,214,163,169,185,234,181,229,32,32,32,32

 

 

위와 같이 해보게 되었다.

결국 20바이트 짜리 텍스트를 얻게 되었다.

순서, 조합에 따라 이렇게 결과가 달라지니, 하나 하나 꼭 점검해봐야 하겠다는 결론을 얻게 된다.

 

(ㅎㅎㅎ 그렇다. 필자는 산울림 오랜... 팬이다. 그래서 김창완을 억수로 좋아한다. ㅋㅋㅋ)

관련글 더보기

댓글 영역