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: Wie behebe ich „Der angegebene Schlüssel war zu lang; die maximale Schlüssellänge beträgt 767 Bytes'?

Linda Hamilton
Linda HamiltonOriginal
2024-12-13 19:41:19188Durchsuche

MySQL Error #1071: How to Resolve

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn