Heim > Datenbank > MySQL-Tutorial > Warum gibt MySQL „Angegebener Schlüssel war zu lang; maximale Schlüssellänge beträgt 1000 Bytes' zurück und wie kann ich das Problem beheben?

Warum gibt MySQL „Angegebener Schlüssel war zu lang; maximale Schlüssellänge beträgt 1000 Bytes' zurück und wie kann ich das Problem beheben?

Mary-Kate Olsen
Freigeben: 2024-12-10 09:02:10
Original
315 Leute haben es durchsucht

Why Does MySQL Return

Fehlererklärung „Angegebener Schlüssel war zu lang; maximale Schlüssellänge beträgt 1000 Bytes“

Problembeschreibung:

Wann Beim Versuch, die folgende Abfrage auszuführen:

CREATE TABLE IF NOT EXISTS `pds_core_menu_items` (
  ...
  KEY `index` (`parent_menu_id`,`menu_link`,`plugin`,`alias`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Nach dem Login kopieren

Es ist ein Fehler aufgetreten: „#1071 – Der angegebene Schlüssel war zu lang; die maximale Schlüssellänge beträgt 1000 Bytes“.

Erklärung:

Dieser Fehler tritt auf, wenn die kombinierte Länge der Spalten in der Der Index überschreitet die maximal zulässige Schlüssellänge von 1000 Byte. In diesem Fall enthält der für die Tabelle pds_core_menu_items erstellte Index vier Spalten: parent_menu_id, menu_link, Plugin und Alias, die jeweils eine Länge von 32, 255, 255 und 255 Byte haben.

Lösung :

Um dieses Problem zu beheben, reduzieren Sie die Größe von den Index, indem Sie kürzere Spaltenlängen verwenden oder die Anzahl der im Index enthaltenen Spalten begrenzen.

Empfohlener Ansatz:

Der empfohlene Ansatz besteht darin, zur Optimierung Präfixindizes zu verwenden Indexgröße und Leistung. Bei Präfixindizes werden nur die ersten paar Zeichen einer Zeichenfolgenspalte indiziert. Dieser Ansatz kann die Indexlänge erheblich reduzieren.

Zum Beispiel erstellt die folgende modifizierte Abfrage einen Präfixindex für jede der vier Spalten:

CREATE TABLE IF NOT EXISTS `pds_core_menu_items` (
  ...
  KEY `index` (`parent_menu_id`,`menu_link`(50),`plugin`(50),`alias`(50))
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Nach dem Login kopieren

Zusätzlicher Hinweis:

Darüber hinaus ist zu beachten, dass die Datentypen INT(1) und INT(32) in der Abfrage keinen Einfluss auf die Speichergröße haben bzw. Wertebereich der Spalten. INT verwendet immer 4 Byte Speicher und erlaubt Werte von -2147483648 bis 2147483647. Das numerische Argument kann das Auffüllen von Werten während der Anzeige beeinflussen, was nicht relevant ist, es sei denn, ZEROFILL wird verwendet.

Das obige ist der detaillierte Inhalt vonWarum gibt MySQL „Angegebener Schlüssel war zu lang; maximale Schlüssellänge beträgt 1000 Bytes' zurück und wie kann ich das Problem beheben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage