Data truncation: Out of range value for column
스프링 부트에서 MySQL로 데이터를 삽입하는 과정에서
Data truncation: Out of range value for column 오류를 만나는 경우가 종종 있습니다.
이 오류는 보통 데이터 타입 불일치나 저장하려는 값이 해당 컬럼의 데이터 타입 범위를 초과할 때 발생합니다.
이번 글에서는 이 문제의 원인과 해결 방법에 대해 알아보겠습니다.
오류 발생 상황
- 스프링 부트 애플리케이션에서 MySQL로 데이터를 저장하려고 할 때, 다음과 같은 에러가 발생할 수 있습니다:
Data truncation: Out of range value for column 'column_name' at row 1
- 이 에러는 MySQL이 해당 컬럼에 삽입하려는 값이 그 컬럼에 설정된 데이터 타입의 범위를 벗어났다는 것을 의미합니다.
- 주로 INT, BIGINT 같은 숫자 타입에서 발생하는데, 예를 들어 INT 타입 컬럼에 너무 큰 숫자를 저장하려고 하면 문제가 발생합니다.
오류 원인 분석
- 가장 흔한 원인은 데이터 타입의 범위를 초과하는 값을 삽입하려 할 때입니다.
- 예를 들어 MySQL에서 INT 타입은 -2,147,483,648부터 2,147,483,647까지 저장할 수 있습니다.
- 이 범위를 넘는 숫자를 삽입하려고 하면 문제가 발생합니다.
- 다음은 INT 타입으로 설정된 컬럼에 11자리 숫자를 삽입하려고 할 때 발생할 수 있는 문제입니다.
CREATE TABLE example_table (
id INT
);
- 여기서 id 컬럼은 INT 타입으로 설정되었기 때문에 2,147,483,647보다 큰 값은 저장할 수 없습니다. 만약 10945613445 같은 값을 삽입하려 한다면 위와 같은 Out of range 오류가 발생합니다.
해결 방법
1) 데이터 타입 수정
- 오류를 해결하기 위한 첫 번째 방법은 컬럼의 데이터 타입을 수정하는 것입니다. I
- NT 타입이 아닌, 더 큰 값을 저장할 수 있는 BIGINT 타입으로 변경하는 것이 일반적입니다.
ALTER TABLE example_table MODIFY COLUMN id BIGINT;
- BIGINT 타입은 -9,223,372,036,854,775,808부터 9,223,372,036,854,775,807까지의 범위를 다룰 수 있기 때문에, 11자리 이상의 큰 숫자도 문제없이 저장할 수 있습니다.
2) 데이터 유효성 검사
- 데이터 타입을 수정하는 것이 어렵거나 불가능한 상황이라면, 애플리케이션 레벨에서 유효성 검사를 추가하여 잘못된 값이 데이터베이스로 넘어가지 않도록 할 수 있습니다.
public void saveData(long id) {
if (id > Integer.MAX_VALUE) {
throw new IllegalArgumentException("ID 값이 너무 큽니다.");
}
// 데이터 저장 로직
}
정리
- Data truncation: Out of range value for column 오류는 데이터 타입 범위를 초과하는 값이 삽입될 때 발생합니다.
- 이를 해결하기 위해서는 데이터 타입을 더 큰 값으로 변경하거나, 유효성 검사를 통해 문제를 미리 방지하는 방법이 있습니다.
- 이 문제를 이해하고 적절히 대응하면 데이터베이스와 애플리케이션 간의 상호작용에서 발생할 수 있는 오류를 효과적으로 해결할 수 있습니다.
'Spring > error' 카테고리의 다른 글
Could not load requested class : org.hibernate.dialect.MySQL5InnoDBDialect (0) | 2023.11.30 |
---|