DBAtlas · Атлас эксплуатации баз данных

1170: ER_BLOB_KEY_WITHOUT_LENGTH: BLOB/TEXT column used in key specification without a key length

MySQL

Что это значит?

Вы использовали столбец BLOB или TEXT в определении индекса/ключа без указания длины префикса. Эти типы нельзя проиндексировать целиком; индексировать можно только первые N символов/байт.

Почему возникает?

Определение INDEX/UNIQUE/PRIMARY KEY на столбце TEXT/BLOB без длины в CREATE TABLE или CREATE INDEX. MySQL требует длину префикса, так как не может индексировать целиком эти потенциально очень большие значения.

Как исправить

Укажите длину префикса в индексе, например INDEX (description(255)). Пример: ALTER TABLE my_table ADD INDEX idx_description (description(191)); (191 часто используется с utf8mb4 из-за лимита префикса ключа InnoDB). Если нужен полнотекстовый поиск, рассмотрите индекс FULLTEXT. Для полей, которые должны быть короткими и уникальными, может быть уместнее преобразовать столбец в VARCHAR.

Открыть в DBAtlas →

Ещё по этой СУБД