DBAtlas · 데이터베이스 운영 아틀라스

1170: ER_BLOB_KEY_WITHOUT_LENGTH: BLOB/TEXT column used in key specification without a key length (키 길이 없이 BLOB/TEXT 컬럼을 키에 사용함)

MySQL

의미

인덱스/키 정의에 접두사 길이를 지정하지 않고 BLOB 또는 TEXT 컬럼을 사용했다. 이 타입은 전체를 인덱싱할 수 없으며 처음 N개 문자/바이트만 인덱싱할 수 있다.

원인

CREATE TABLE 또는 CREATE INDEX에서 길이 없이 TEXT/BLOB 컬럼에 INDEX/UNIQUE/PRIMARY KEY를 정의한 경우다. MySQL은 잠재적으로 매우 큰 이 값들을 전체 인덱싱할 수 없으므로 접두사 길이를 요구한다.

해결 방법

인덱스에 접두사 길이를 지정한다(예: INDEX (description(255))). 예: ALTER TABLE my_table ADD INDEX idx_description (description(191)); (InnoDB 키 접두사 한도 때문에 utf8mb4에서는 191을 흔히 사용한다). 전문 검색이 필요하면 FULLTEXT 인덱스를 고려한다. 짧고 고유해야 하는 필드라면 컬럼을 VARCHAR로 변환하는 것이 더 적합할 수 있다.

DBAtlas에서 열기 →

같은 데이터베이스의 다른 항목