코딩 하는 가든

[Mysql] Error executing DDL (feat: max key length is 767 bytes, JPA) 본문

오늘의 에러

[Mysql] Error executing DDL (feat: max key length is 767 bytes, JPA)

가든리 2020. 5. 26. 23:58

[오늘의 에러]

Npoem(개인 프로젝트) 서버의 EC2에 hibernate auto ddl로 테이블을 생성하다 아래와 같은 에러가 발생하였다.

GenerationTarget encountered exception accepting command : Error executing DDL "alter table ~~" via JDBC Statement
Caused by: java.sql.SQLSyntaxErrorException: (conn=152) Specified key was too long; max key length is 767 bytes

 

 Error excuting DDL 에러가 나는 경우가 몇 가지 있을 것이다. (alter table drop foreign key, alter table add foreign key 등등...) 

 

이 에러가 난 이유를 타고 타고 들어가다 보면 만날 수 있는 원인 중 하나가 max key length is 767 bytes 에러이다.

 

이 에러가 나는 이유는 간단히 말해 mysql의 table을 InnoDB로 생성할 경우 InnoDB Table에 대한 인덱스 길이 제약이 걸리기 때문이다.

 

해결 방법은 두 가지가 있을 수 있는데

1. InnoDB 설정의 인덱스 길이 제약을 늘린다.

2. 테이블 필드의 길이 제한을 건다.

 

본인이 이 에러를 겪은 이유는 JPA @Column 어노테이션에 length 인자를 넣지 않아서였다. 길이 제약이 없어 최대 길이인 767 바이트를 넘어가 버린 것 같다.

@Column(length = 100) 과 같이 length를 지정해주니 제대로 실행이 되었다.