본문 바로가기
Web Programming/DB

[DB, ORACLE] 오라클의 데이터타입(Datatype) 바이트(byte)와 자바의 byte 차이 (자바에서 디비로 문자열데이터 넘길때 바이트 차이)

by jaey0ng 2023. 1. 25.

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로 들고오게 됩니다.