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 중국어 웹사이트의 기타 관련 기사를 참조하세요!