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로 들고오게 됩니다.
'Web Programming > DB' 카테고리의 다른 글
[ORACLE] JSON 파싱(Parsing)하기 (조회하기) (0) | 2023.02.14 |
---|---|
[ORACLE] 조인 쿼리(join query), 조인 종류, 조인 쿼리 예시 (2) | 2023.01.30 |
[Oracle] 오라클 계층구조(트리구조)로 조회하기 (level, start with...connect by prior, order siblings by) (1) | 2023.01.25 |
[MySQL] DB import/export (0) | 2022.10.02 |
[MySQL] FK (Foreign Key) 적용하기 (0) | 2022.10.02 |