db/mysql

mysql "Specified key was too long; max key length is 1000 bytes"

C/H 2010. 8. 30. 08:30

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

mysql 이 key 의 길이를 1000바이트로 제한하기 때문이다.
mysql 측에서는 이걸 버그라 보지 않고 “제한”이라고 봐서 당분간은 처리할 용의가 없답니다.
latin-1 에서는 1글자가 1바이트이지만 utf-8 에서는 한글자가 3바이트이기 때문에 크기 계산에 주의해야 한다.
latin1 = 1 byte = 1 chararcter
uft8 = 3 byte = 1 chararcter
즉, varchar(255)에서 255는 255 “바이트”가 아니라 “글자”이기 때문이다. utf-8일 경우 한글은 한 글자당 3바이트이므로 255 * 3 * 2 > 1000 이다.

해결은 TYPE… 부분을 ENGINE=InnoDB DEFAULT CHARSET=utf8 변경


보통 쓰는 varchar(255)가 UTF-8에서는 765바이트로 2개에 인덱스를 걸 때 1000바이트가 넘어갈 수 있다는 사실이 놀랍다.
varchar(255) 2개에다가 동시에 index를 걸 때 "Specified key was too long; max key length is 1000 bytes" 라는 에러가 나는 것도 이 때문이다.


해결방법은 INDEX를 생성시 인덱스 키가 1000 bytes 가 넘지 않도록 하면 된다.
만약 varchar(1000) 필드에 인덱스를 생성한다면 (255)만큼만 생성된다.
varchar(255) 2개 이상에 인덱스를 생성해야 할 경우 각각 인덱스를 생성하면 설치가 문제 없이 진행된다.


반응형

'db > mysql' 카테고리의 다른 글

mysql error 2006 "MySQL server has gone away"  (0) 2010.10.19
MySQL 16진수 자료형  (0) 2010.09.01
mysql max_connect  (0) 2010.08.21
mysql unauthenticated user 프로세스 문제  (0) 2010.08.20
mysql log  (0) 2010.01.27