>데이터 베이스 >MySQL 튜토리얼 >MySQL이 '지정된 키가 너무 깁니다. 최대 키 길이는 1000바이트입니다'를 반환하는 이유는 무엇이며 어떻게 해결할 수 있습니까?

MySQL이 '지정된 키가 너무 깁니다. 최대 키 길이는 1000바이트입니다'를 반환하는 이유는 무엇이며 어떻게 해결할 수 있습니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-10 09:02:10317검색

Why Does MySQL Return

"지정된 키가 너무 깁니다. 최대 키 길이는 1000바이트입니다." 오류 설명

문제 개요:

다음 쿼리를 실행하려고 합니다:

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

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.