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로 되어있기 때문이다.
확인방법
[쿼리]
|
[결과]
NLS_CHARACTERSET | AL32UTF8 |
NLS_NCHAR_CHARACTERSET | AL16UTF16 |
UTF-8에선 한글은 3byte이기 때문에 발생한 문제였다.
해결방법은 java에서 byte를 체크할때
|
UTF-8로 바이트를 구한다.
그렇다면 동일한 byte수를 구할 수 있다.