Database/Oracle

[Oracle] ORA-12899: value too large for column

Nirsa 2019. 11. 12. 16:07
반응형

ORA-12899: value too large for column

ORA-12899: "유저명"."테이블명"."컬럼명" 열에 대한 값이 너무 큼 (실제: 5, 최대값: 3)

 

위의 에러는 컬럼에 정의된 길이보다 큰 문자열을 입력하려할 때 발생하는 에러 입니다.

 

아래의 커리문처럼 NAME 이라는 컬럼에 NCHAR(3) 로 정의해주었으나, 3글자가 아닌 5글자를 입력하여 정의해준 문자열의 수 보다 많이 입력될 때에 발생 하기 때문에 NCHAR(3)를 NCHAR(5)와 같이 수정해주면 에러가 해결됩니다.

 

- 수정 전 쿼리 중 문제가 된 부분

"MEMBERNAME" NCHAR(3) NOT NULL ENABLE

 

- 수정 후

"MEMBERNAME" NCHAR(5) NOT NULL ENABLE

 

간혹 DB의 데이터 이관 시 UTF-8 과 ASCII 처럼 서로 Byte 수가 틀려 캐릭터셋의 문제로 에러가 발생하기도 합니다. 오라클의 캐릭터셋을 확인 후 변경을 해주어야 합니다.

 

1. 쿼리를 통해 캐릭터셋 조회

SELECT * FROM NLS_DATABASE_PARAMETERS

WHERE PARAMETER

LIKE '%CHARACTERSET%';

 

2. 캐릭터셋 변경(UTF-8 -> KO16MSWIN949)

SQL> update props$ set value$='KO16MSWIN949' where name='NLS_CHARACTERSET'; // value에 변경하려는 문자셋 입력
SQL> update props$ set value$='KO16MSWIN949' where name='NLS_NCHAR_CHARACTERSET'; // value에 변경하려는 문자셋 입력 
SQL> commit; 
SQL> shutdown immediate
SQL> startup 

 

주의 : 기존 데이터 깨짐 등의 가능성이 있기에 매우 조심히 작업해야 합니다. 기존 데이터를 모두 백업하고 테스트 후에 진행하는것을 권고 드립니다.

(원본 백업 파일은 필수)

반응형