일상 기록 창고

Specified key was too long; max key length is 767 bytes 본문

프로그래밍/mysql

Specified key was too long; max key length is 767 bytes

Crazy_Kong 2018. 5. 4. 10:06

- 다음과 같은 오류 발생 시 

Specified key was too long; max key length is 767 bytes


utf8mb4 의 경우 varchar(191) 까지만 인덱스 가 가능하다.


VARCHAR(255)이 차지하는 최대 bytes 수

  - utf8인 경우 255 x 3 = 765 bytes (인덱스 가능)

  - utf8mb4인 경우 255 x 4 = 1020 bytes (인덱스 불가능!)


VARCHAR(191)

  - utf8mb4인 경우 191 x 4 = 764 bytes (인덱스 가능)



해결1 : 인덱스에 191byte 로 지정하기

 

 KEY IDX_KEY ( `cData`(191) )



해결2 : my.conf 설정 변경


innodb_file_format   = barracuda

innodb_large_prefix  = on


저장 후 재 시작.

테이블 새로 생성 구문에 다음과 같은 구문 추가

create table test ( .... ) ROW_FORMAT = DYNAMIC