1071: Specified key was too long; max key length is 767 bytes (Schlüssel zu lang; maximal 767 Bytes)
MySQLWas bedeutet das?
Der anzulegende Index (oder Schlüssel) hat die maximal erlaubte Länge in Bytes überschritten. Besonders bei Multibyte-Zeichensätzen erreichen VARCHAR-Indizes dieses Limit schnell.
Ursache
Ein Index auf einer breiten VARCHAR-Spalte mit utf8mb4 (4 Bytes pro Zeichen); ein altes InnoDB-Row-Format (REDUNDANT/COMPACT; in 5.7 und früher auch ein deaktiviertes innodb_large_prefix); die Gesamtlänge eines zusammengesetzten Index über mehrere Spalten überschreitet das Limit; ein großer Primärschlüssel.
Lösung
Verkürze die indizierte Spaltenlänge oder verwende einen Präfix-Index: CREATE INDEX idx ON my_table (my_column(191)); Wechsle mit dem Row-Format DYNAMIC/COMPRESSED auf das Limit von 3072 Bytes (DYNAMIC ist in MySQL 8.0 Standard; innodb_large_prefix wurde in 8.0 entfernt und ist nur in 5.7 und früher nötig). Überprüfe bei Bedarf Zeichensatz/Länge der Spalte.
Weitere Einträge zu dieser Datenbank
- 1048Column 'x' cannot be null (Spalte darf nicht NULL sein)
- 1292Incorrect datetime value / truncated incorrect value (falscher Datums-/Zeitwert)
- 1406Data too long for column (Daten zu lang für Spalte)
- 1050Table already exists (Tabelle existiert bereits)
- 1051Unknown table 'x' (unbekannte Tabelle)
- 1091Can't DROP 'x'; check that column/key exists (DROP nicht möglich; Spalte/Schlüssel existiert nicht)
- 1093You can't specify target table 'x' for update in FROM clause (Zieltabelle des Updates nicht in FROM-Klausel erlaubt)