Web Programming/DB
[DB, ORACLE] 오라클의 데이터타입(Datatype) 바이트(byte)와 자바의 byte 차이 (자바에서 디비로 문자열데이터 넘길때 바이트 차이)
jaey0ng
2023. 1. 25. 12:09
Oracle, MySQL 등 DB의 데이터 유형을 VARCHAR이나 VARCHAR2(10BYTE) 로 줬다고 가정합니다
실제 디비 쿼리문으로 작성을 해보면
UPDATE table
SET 컬럼명 = 일이삼사오
WHERE 컬럼명 = '*'
AND 컬럼명2 = '*'
;
라고 했을 때를 가정해봅시다
자바에서 데이터를 넘기면
오라클 기준 ORA-12899: ~~~ 열에 대한 값이 너무 큼(실제:15, 최대값:10) 이라는 에러가 발생할 것입니다.
이유는 자바에서 한글 데이터를 넘겼을 때
DB의 'CHARACTER SET'이 'UTF-8'로 설정되어 있으면
한글의 문자크기를 3BYTE로 들고가기 떄문에 에러가 발생하는 겁니다.
따라서 자바에서 받는 한글 문자열은 3byte로 생각하고
table내 데이터타입(크기)를 설정해주거나,
자바에서 byte 체크할 때 UTF-8로 byte를 구하면 됩니다.
DB의 CHARACTER SET을 확인하는 방법입니다.
SELECT *
FROM NLS_DATABASE_PARAMETERS
WHERE PARAMETER LIKE '%CHARACTERSET%'
;
위로 조회했을 때
2개의 값이 나오는데 그 중 하나의 value값이 AL32UTF8로 나왔다면
DB의 CHARACTER SET은 UTF-8로 설정되어 있기에
한글은 3byte로 들고오게 됩니다.