이 경우 MySQL 오류 1071(키가 너무 깁니다)의 원인은 무엇입니까?
나는 다음 표를 인코딩했습니다.utf8mb4
:
CREATE TABLE IF NOT EXISTS `account` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`customer_id` INT UNSIGNED NOT NULL,
`name` VARCHAR(45) NOT NULL,
`username` VARCHAR(254) NOT NULL,
`password` CHAR(60) NOT NULL,
PRIMARY KEY (`id`),
INDEX `fk_table1_customer_idx` (`customer_id` ASC),
UNIQUE INDEX `unique_account` (`customer_id` ASC, `username` ASC),
CONSTRAINT `fk_table1_customer`
FOREIGN KEY (`customer_id`)
REFERENCES `customer` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB
ROW_FORMAT = DYNAMIC;
여기에 부울 열을 추가해야 하므로 다음 작업을 수행합니다.
ALTER TABLE `account`
ADD COLUMN `is_customer_admin`
INT(4) NOT NULL DEFAULT 0
AFTER `customer_id`;
나는 또한 구체적으로 a를 추가하려고 했습니다.BOOLEAN
대신 열INT(4)
그러나 오류가 발생합니다.
오류 1071 (42000):지정한 키가 너무 깁니다. 최대 키 길이는 767바이트입니다.
그런 오류는 처음입니다.저는 그 구체적인 오류에 대해 몇 가지 질문을 발견했지만, 제 상황에 직접 적용할 수는 없었습니다.
이 질문을 통해 나는 이해합니다.username
시간이 너무 길 수도 있지만, 애당초 어떻게 그 테이블을 만들었는지 이해가 안 되네요.내 쿼리는 해당 필드에 닿지 않습니다.
이전 MySQL/MariaDB 버전에서는 최대 키(인덱스) 길이가 767바이트만 허용됩니다.문서:
기본적으로 인덱스 키 접두사 길이 제한은 767바이트입니다.예를 들어 TEXT 또는 VARCHAR 열에 255자 이상의 열 접두사 인덱스를 사용하여 utf8mb3 문자 집합과 각 문자에 대해 최대 3바이트를 가정할 수 있습니다.innodb_large_prefix 구성 옵션을 활성화하면 Dynamic 또는 COMPRESS 행 형식을 사용하는 InnoDB 테이블의 인덱스 키 접두사 길이 제한이 3072바이트로 증가합니다.
이제, 당신의 경우 문제는 당신이 사용하고 있는 것처럼 더욱 증가합니다.utf8mb4
대신 문자 집합.이는 문자당 4바이트(3바이트가 아님)를 의미합니다.
`username` VARCHAR(254)
이것은 다음을 의미할 것입니다.254 * 4 = 1016
바이트, 확실히 한계를 넘어서고 있습니다.지정된 최대 문자 수를 줄여야 합니다.username
기둥.
또한, 다음 제약 조건은 다음과 같이 크게 의미가 없습니다.customer_id
이미 Primary 키입니다.
UNIQUE INDEX `unique_account` (`customer_id` ASC, `username` ASC)
그것도 없앨 수 있습니다.
언급URL : https://stackoverflow.com/questions/53326521/what-is-causing-mysql-error-1071-key-too-long-in-this-case
'programing' 카테고리의 다른 글
도커 구성 버전 3에서 메모리 및 CPU 제한을 지정하는 방법 (0) | 2023.10.19 |
---|---|
단일 도메인/웹 서버에서 여러 워드프레스 사이트 실행 (0) | 2023.10.19 |
XML로 직사각형을 그릴 수 있습니까? (0) | 2023.10.19 |
Linux에서 파일을 열 때 O_CLOEXEC을 언제 사용해야 합니까? (0) | 2023.10.19 |
jQuery derped의 "그때" 방법을 언제 사용해야 하고 "파이프" 방법을 언제 사용해야 합니까? (0) | 2023.10.19 |