Database
[mysql] Error Code: 1071. Specified key was too long; max key length is xxx bytes
허니몬
2016. 11. 29. 15:03
증상발견
스키마를 정의하는 sql 을 작성하던 중에 테이블 생성 중에 다음과 같은 메시지와 함께 테이블 생성이 중단되는 문제가 발생했다.
... 로그 생략 ...Error Code: 1071. Specified key was too long; max key length is 3072 bytes
발생원인
조합한 컬럼은
varchar(255)
로 선언된 5개의 컬럼을 UNIQUE KEY로 지정하면서 발생했다.varchar(255) * 3byte = 765byte // 1개 컬럼길이 765byte * 5 = 3825byte // 최대길이인 3072byte 보다 753byte 길다
MySQL 은 한국어를 비롯한 아시아쪽의 문자 하나를 저장하는데 3byte 혹은 4byte를 저장한다.
For InnoDB tables, the limit is 3072 bytes across all indexed columns, presumably taking only the first 767 bytes of each column.
For MyISAM tables, it’s the lesser of 16 columns or 1000 bytes.
해결방안
사용하고 있는 mysql 엔진의 종류에 따라 제한된 크기 이내로 컬럼의 크기를 조정해야 한다.