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.
Ещё по этой СУБД
- 1836ER_READ_ONLY_MODE: Running in read-only mode
- 3819ER_CHECK_CONSTRAINT_VIOLATED: Check constraint is violated
- 1118ER_TOO_BIG_ROWSIZE: Row size too large
- 1592ER_BINLOG_UNSAFE_STATEMENT: Unsafe statement written to the binary log
- 3140ER_INVALID_JSON_TEXT: Invalid JSON text
- 1526ER_NO_PARTITION_FOR_GIVEN_VALUE: Table has no partition for value
- 1049Unknown database 'name'