오늘의 에러
[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를 지정해주니 제대로 실행이 되었다.