본문 바로가기

트러블 슈팅

[JPA] Data truncation: Data too long for column

@Getter
@Entity
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class Qna extends BaseEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "user_id")
    private Account account;

    private String title;

    private String content;

}
spring:
  jpa:
    hibernate:
      ddl-auto: create

위와 같이 Qna Entity를 생성하고 jpa.hibernate.ddl-auto: create로 설정해 MySQL에 Qna 테이블을 자동으로 생성하였다.

 

Qna를 등록하는 과정에서 content를 500자 정도로 설정하고 qnaRepository.save(qna)를 호출하였을 때, 다음과 같은 오류가 발생하였다.

com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: 
	Data truncation: Data too long for column '' at row 1

 

 

원인

해당 오류는 자동으로 테이블을 생성하고 String 타입의 필드에 @Cloumn의 length 옵션을 지정하지 않으면 default 값인 255로 설정되기 때문에,  MySQL 테이블에서 해당 필드는 varchar(255)로 설정된다.

이로 인해, content가 255자가 넘어 "Data too long for column" 오류가 발생한 것이다.

 

해결

@Getter
@Entity
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class Qna extends BaseEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "user_id")
    private Account account;

    private String title;

    @Column(length = 1000)
    private String content;

}

@Cloumn의 length 옵션으로 varchar 길이를 설정하여 테이블 자동 생성 시 varchar({설정 값})으로 타입이 지정되게 할 수 있다.