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 で開く →

同じデータベースの他の項目