반응형

🚨 Spring에서 API 전송시 발생한 에러 메시지
com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'ID' at row
❓에러 발생 이유
MySQL에서 데이터를 INSERT 할 때 데이터가 해당 칼럼의 길이 제약 조건 보다 클 경우 나타나는 에러 메시지입니다.
예를 들어 "customers" 테이블의 "id" 칼럼의 데이터 타입은 varchar(10)인데,
"id" 칼럼에 11글자의 데이터를 INSERT 할 경우 길이 제약 조건에 위배되어 나타나는 에러 메시지입니다.
✅ 해결 방법
1. DB에서 칼럼의 DataType 변경
처음 DB를 설계했을 때와 데이터의 길이가 달라졌다면, DB에서 칼럼의 DataType을 변경하여도 무방합니다.
예를들어 처음 DB를 설계했을 때에는 "customers" 테이블에서 "id" 칼럼의 데이터 길이가 10이였지만,
나의 서비스에서 "id" 칼럼에 10자리가 초과되는 데이터가 계속해서 추가되어야 하는 상황이라면
DB에서 해당 칼럼의 DataType을 변경하는것이 좋은 방법일 수 있습니다.
ALTER TABLE customers
MODIFY COLUMN id VARCHAR(50) NOT NULL;
참고: 실무에서 DB의 칼럼을 변경하는 작업은 매우 신중히 해야할 작업입니다.
따라서 칼럼 수정이 정말로 필요한지 한번 더 생각해보고 수정하는것을 권장드립니다.
2. Server 에서 데이터의 길이를 수정하여 INSERT
DB에서 칼럼의 DataType을 변경하지 않고,
서버(Spring 등)에서 데이터의 길이를 수정하여 INSERT 작업을 요청 하여도 무방합니다.
대신에 이럴 경우에는 나의 DB에서 데이터의 무결성 조건을 위배하는것은 아닌지를 반드시 확인해야합니다.
@Service
@Transactional(readOnly = true)
@RequiredArgsConstructor
public class CustomerService {
private final CustomerRepository customerRepository;
@Transactional
public void saveCustomer(Customer customer) {
String trimmedId = customer.getId().trim(); // trim 메서드를 통하여 공백 제거
trimmedId = trimmedId.length() > 10
? trimmedId.substring(0, 10) // id가 10글자를 초과하면 substring 메서드를 통하여 글자 제한 후 반환
: trimmedId; // id가 10글자 이하면 trimmedId 반환
customer.setId(trimmedId);
customerRepository.save(customer);
}
}
반응형
'DataBase' 카테고리의 다른 글
| [MySQL] Error Code: 1049 오류 발생 원인 & 해결 방법 (0) | 2025.08.07 |
|---|---|
| [MySQL] Error Code: 1007 오류 발생 원인 & 해결 방법 (0) | 2025.08.07 |
| [MySQL] Workbench 테이블, 스키마 보이지 않을 때 해결 방법 (0) | 2024.07.16 |
| [MySQL] MySQL zip(압축파일) D 드라이브에 설치 방법 비전공자도 쉽게 설치 가능 (0) | 2023.08.12 |
| [MySQL] 테이블 & 데이터 복사 하는 방법 총 정리 (0) | 2023.01.10 |
댓글