본문 바로가기
MySQL 에러 처리법

14. ERROR 1071 (42000): Specified key was too long; max key length is 767 bytes

by 모모레 2015. 9. 21.

인덱스를 생성하다 보면 다음과 같은 에러를 만날 때가 있다.


ERROR 1071 (42000): Specified key was too long; max key length is 767 bytes


위 에러는 innodb의 인덱스 키 제약에 걸리는 경우 발생한다.


http://dev.mysql.com/doc/refman/5.6/en/innodb-restrictions.html


위의 url에서 확인하면 InnoDB 인덱스에 대한 제약 사항을 확인할 수 있다.


그럼 위와 같이 에러가 발생하면 어떻게 처리하면 되는가?


1. 키 사이즈를 줄인다.

제약사항은 byte로 처리되므로, 문자형 컬럼의 경우 character set에 따라 허용하는 글자의 수가 달라짐을 이해해야 한다.

euckr이라면 2byte, utf8 이라면 3byte, utf8mb4 라면 4byte로 계산해야 한다.


2. 파일 포맷을 변경하고 시스템 변수 설정값을 바꾼다.

바로 바라쿠다 포맷으로 파이 포맷을 변경하여 생성하는 것이다.

즉,

innodb_file_format_max=Barracuda
innodb_file_format=Barracuda

이렇게 설정되서 Barracuda 형태로 생성되게 시스템 변수를 설정하고,


innodb_large_prefix=ON 으로 설정한다.  그러면 약 3072 byte까지 생성할 수 있다.


그리고,  테이블을 생성할 때, 바라쿠다 파일 포맷에서 지원하는 로우 포맷인 DYNAMIC이나 COMPRESSED를 설정하여 생성해야 한다.