> 데이터 베이스 > MySQL 튜토리얼 > MySQL 오류 #1071: '지정된 키가 너무 깁니다. 최대 키 길이는 767바이트입니다.'를 해결하는 방법은 무엇입니까?

MySQL 오류 #1071: '지정된 키가 너무 깁니다. 최대 키 길이는 767바이트입니다.'를 해결하는 방법은 무엇입니까?

Linda Hamilton
풀어 주다: 2024-12-13 19:41:19
원래의
187명이 탐색했습니다.

MySQL Error #1071: How to Resolve

MySQL 오류 #1071: 키 길이 제약 조건 이해

데이터베이스 테이블에 대한 고유 키를 생성하려고 시도하는 동안 다음 오류가 발생합니다. :

#1071 - Specified key was too long; max key length is 767 bytes
로그인 후 복사

오류 메시지는 지정된 키가 허용된 최대 길이를 초과했음을 나타냅니다. InnoDB 테이블은 767바이트입니다. 이 동작은 5.6 이전 버전과 같은 이전 버전의 MySQL에서 흔히 볼 수 있습니다.

VARCHAR 열에 대한 바이트 계산

VARCHAR(20) 유형의 열 1개가 있습니다. 및 VARCHAR(500) 유형의 열2입니다. 처음에는 키에 767보다 작은 21 501 = 522바이트가 필요하다고 가정할 수 있습니다. 그러나 이 가정은 올바르지 않습니다.

접두사 길이 제한 이해

MySQL 문서에는 키의 최대 접두사 길이가 767바이트라고 명시되어 있습니다. 이 길이 제한은 키에 포함된 열의 결합된 길이에 적용됩니다. 이 경우 총 키 길이는 21 500 = 521바이트로 767보다 작습니다.

그러나 접두사 길이 제한은 실제로 열에서 사용되는 문자 인코딩에 따라 다르다는 점에 유의하는 것이 중요합니다. VARCHAR(20)과 같은 유니코드가 아닌 열의 경우 각 문자에는 1바이트가 필요합니다. 그러나 VARCHAR(500) utf8_general_ci와 같은 유니코드 열의 경우 각 문자에 여러 바이트가 필요할 수 있습니다.

유니코드 열에 대한 바이트 계산

이 경우, column2는 유니코드 열. utf8_general_ci 문자 세트는 문자당 최대 3바이트를 사용합니다. 따라서 유니코드 열의 실제 키 길이는 문자 길이에 문자당 바이트 수를 곱하여 계산됩니다.

20 bytes (column1) + (500 bytes * 3 bytes per character) = 1501 bytes
로그인 후 복사

해결책: 키 접두사 단축

키 길이가 최대 한도를 초과하므로 키 접두어를 줄여서 오류를 해결할 수 있습니다. 이는 컬럼2에 대해 인덱싱되는 문자 수를 제한하여 달성할 수 있습니다. 예:

ALTER TABLE `mytable` ADD UNIQUE ( column1(15), column2(200) );
로그인 후 복사

이 조정으로 총 키 길이가 21(200 * 3) = 621바이트로 줄어들어 이제 767바이트 접두사 길이 제한을 준수합니다.

위 내용은 MySQL 오류 #1071: '지정된 키가 너무 깁니다. 최대 키 길이는 767바이트입니다.'를 해결하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿