문제 개요:
다음 쿼리를 실행하려고 합니다:
CREATE TABLE IF NOT EXISTS `pds_core_menu_items` ( ... KEY `index` (`parent_menu_id`,`menu_link`,`plugin`,`alias`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
오류 "#1071 - 지정된 키가 너무 깁니다. 최대 키 길이는 1000바이트입니다.".
설명:
이 오류는 인덱스의 열이 허용되는 최대 키 길이인 1000바이트를 초과했습니다. 이 경우 pds_core_menu_items 테이블에 생성된 인덱스에는 각각 길이가 32, 255, 255 및 255바이트인 parent_menu_id, menu_link, 플러그인 및 별칭의 4개 열이 포함됩니다.
해결책 :
이 문제를 해결하려면 크기를 줄이세요. 더 짧은 열 길이를 사용하거나 인덱스에 포함되는 열 수를 제한하여 인덱스를 생성합니다.
권장 접근 방식:
권장 접근 방식은 접두사 인덱스를 사용하는 것입니다. 인덱스 크기와 성능을 최적화합니다. 접두사 인덱스에는 문자열 열의 처음 몇 문자만 인덱싱됩니다. 이 접근 방식은 인덱스 길이를 크게 줄일 수 있습니다.
예를 들어 다음 수정된 쿼리는 4개 열 각각에 접두사 인덱스를 생성합니다.
CREATE TABLE IF NOT EXISTS `pds_core_menu_items` ( ... KEY `index` (`parent_menu_id`,`menu_link`(50),`plugin`(50),`alias`(50)) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
추가 참고:
또한 쿼리의 INT(1) 및 INT(32) 데이터 유형에 주목할 가치가 있습니다. 열의 저장 크기나 값 범위에는 영향을 주지 않습니다. INT는 항상 4바이트의 저장 공간을 사용하며 -2147483648부터 2147483647까지의 값을 허용합니다. 숫자 인수는 표시 중 값 패딩에 영향을 미칠 수 있으며 이는 ZEROFILL을 사용하지 않는 한 관련이 없습니다.
위 내용은 MySQL이 '지정된 키가 너무 깁니다. 최대 키 길이는 1000바이트입니다'를 반환하는 이유는 무엇이며 어떻게 해결할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!