1170: ER_BLOB_KEY_WITHOUT_LENGTH: BLOB/TEXT column used in key specification without a key length
MySQLWas bedeutet das?
Du hast eine BLOB- oder TEXT-Spalte in einer Index-/Schlüsseldefinition ohne Präfixlänge verwendet. Diese Typen können nicht vollständig indiziert werden; nur die ersten N Zeichen/Bytes sind indizierbar.
Ursache
Definition eines INDEX/UNIQUE/PRIMARY KEY auf einer TEXT/BLOB-Spalte ohne Längenangabe in CREATE TABLE oder CREATE INDEX. MySQL verlangt eine Präfixlänge, weil es diese potenziell sehr großen Werte nicht vollständig indizieren kann.
Lösung
Gib im Index eine Präfixlänge an, etwa INDEX (description(255)). Beispiel: ALTER TABLE my_table ADD INDEX idx_description (description(191)); (191 wird bei utf8mb4 wegen des InnoDB-Limits für Schlüsselpräfixe häufig verwendet). Wird Volltextsuche benötigt, erwäge einen FULLTEXT-Index. Für Felder, die kurz und eindeutig sein sollen, ist die Umstellung der Spalte auf VARCHAR unter Umständen passender.
Weitere Einträge zu dieser Datenbank
- 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'