Back Ground

자바 Byte /오라클 Byte 크기 다를때 UTF-8은 3Byte 본문

JAVA

자바 Byte /오라클 Byte 크기 다를때 UTF-8은 3Byte

Back 2017. 7. 27. 16:09

이클립스를 Encoding을 MS949 기본값으로 설정해 놨던 상태였다.

 

 

java에서 문자열을 바이트를 구해 DB에 입력할 생각이였다.

1
int test_byte = test_text.getByte().length;
cs

 

 

"홍길동" 이라는 문자열의 byte를 구한다. 

그렇다면  문자열은 2byte 처리하기때문에 [ 6 byte ] 가 나오게된다.

 

 

그렇게 Map<String,Object> 에 담아서 DAO를 통해 DB에 넣었는데...

1
map.put("test_text", test_text);
cs
 
DB
 TEST_TEXT VARCHAR2(6);

 

ORA-12899: "테이블"."test_text" 열에 대한 값이 너무큼 (실제:9 최대값:6)

라고 들어 뜰 것이다.

 

 

 

 

 

 

 

그 이유는 

 

DB의 "CHARACTER SET"이 UTF-8로 되어있기 때문이다.

 

확인방법

[쿼리]

1
SELECT * FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER LIKE '%CHARACTERSET%';
cs

[결과]

 NLS_CHARACTERSET  AL32UTF8
 NLS_NCHAR_CHARACTERSET  AL16UTF16 

 

 

UTF-8에선 한글3byte이기 때문에 발생한 문제였다.

 

 

 

해결방법은 java에서 byte를 체크할때

1
int test_byte = test_text.getByte("UTF-8").length;

UTF-8로 바이트를 구한다.

 

그렇다면 동일한 byte수를 구할 수 있다.

 

 

 

참고 http://plakia.tistory.com/432

'JAVA' 카테고리의 다른 글

Kawa  (0) 2019.01.28
JVM/JRE/JDK 이란  (0) 2018.01.29
ModelAndView  (0) 2017.06.01
JVM 메모리 구조  (1) 2017.03.09
JAVA - 배열[]  (0) 2017.02.15
Comments