Heim >Datenbank >MySQL-Tutorial >MySQL-Fehler Nr. 1071: Wie behebe ich „Der angegebene Schlüssel war zu lang; die maximale Schlüssellänge beträgt 767 Bytes'?
MySQL-Fehler Nr. 1071: Schlüssellängenbeschränkungen verstehen
Beim Versuch, einen eindeutigen Schlüssel für eine Datenbanktabelle zu erstellen, tritt der folgende Fehler auf :
#1071 - Specified key was too long; max key length is 767 bytes
Die Fehlermeldung weist darauf hin, dass der angegebene Schlüssel die maximal zulässige Länge für InnoDB-Tabellen überschreitet 767 Byte. Dieses Verhalten tritt häufig in früheren Versionen von MySQL auf, z. B. 5.6 und früher.
Bytes-Berechnungen für VARCHAR-Spalten
Sie haben Spalten Spalte1 vom Typ VARCHAR(20) und Spalte2 vom Typ VARCHAR(500). Zunächst könnten Sie annehmen, dass der Schlüssel 21.501 = 522 Bytes erfordern würde, was weniger als 767 ist. Diese Annahme ist jedoch falsch.
Informationen zu Präfixlängenbeschränkungen
In der MySQL-Dokumentation heißt es, dass die maximale Präfixlänge für Schlüssel 767 Byte beträgt. Diese Längenbeschränkung gilt für die Gesamtlänge der im Schlüssel enthaltenen Spalten. In diesem Fall beträgt die Gesamtschlüssellänge 21.500 = 521 Bytes, also weniger als 767.
Es ist jedoch wichtig zu beachten, dass die Präfixlängenbeschränkung tatsächlich von der von den Spalten verwendeten Zeichenkodierung abhängt. Bei Nicht-Unicode-Spalten wie VARCHAR(20) benötigt jedes Zeichen ein Byte. Bei Unicode-Spalten wie VARCHAR(500) utf8_general_ci kann jedoch jedes Zeichen mehrere Bytes erfordern.
Bytes-Berechnung für Unicode-Spalten
In diesem Fall ist Spalte2 eine Unicode-Spalte. Der Zeichensatz utf8_general_ci verwendet bis zu 3 Bytes pro Zeichen. Daher wird die tatsächliche Schlüssellänge für Unicode-Spalten berechnet, indem die Zeichenlänge mit der Anzahl der Bytes pro Zeichen multipliziert wird:
20 bytes (column1) + (500 bytes * 3 bytes per character) = 1501 bytes
Lösung: Kürzen des Schlüsselpräfixes
Da die Schlüssellänge die maximale Grenze überschreitet, können Sie den Fehler beheben, indem Sie das Schlüsselpräfix kürzen. Dies kann erreicht werden, indem die Anzahl der für Spalte2 indizierten Zeichen begrenzt wird. Zum Beispiel:
ALTER TABLE `mytable` ADD UNIQUE ( column1(15), column2(200) );
Diese Anpassung reduziert die Gesamtschlüssellänge auf 21 (200 * 3) = 621 Bytes, was nun der Präfixlängenbeschränkung von 767 Bytes entspricht.
Das obige ist der detaillierte Inhalt vonMySQL-Fehler Nr. 1071: Wie behebe ich „Der angegebene Schlüssel war zu lang; die maximale Schlüssellänge beträgt 767 Bytes'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!