Heim > Datenbank > MySQL-Tutorial > Wie löst man den MySQL-Fehler 1071: „Der angegebene Schlüssel war zu lang; die maximale Schlüssellänge beträgt 1000 Bytes'?

Wie löst man den MySQL-Fehler 1071: „Der angegebene Schlüssel war zu lang; die maximale Schlüssellänge beträgt 1000 Bytes'?

Susan Sarandon
Freigeben: 2024-12-13 19:21:10
Original
688 Leute haben es durchsucht

How to Solve MySQL Error 1071:

MySQL-Fehler 1071: „Der angegebene Schlüssel war zu lang; die maximale Schlüssellänge beträgt 1000 Bytes“

Beim Erstellen einer MySQL-Tabelle mit einem zusammengesetzten Index können Benutzer auf Folgendes stoßen: Fehler „Angegebener Schlüssel war zu lang; maximale Schlüssellänge beträgt 1000 Bytes“. Dieser Fehler weist darauf hin, dass die Gesamtlänge der indizierten Spalten die maximal zulässige Speichergröße von 1000 Byte überschreitet.

Das Problem im bereitgestellten Codeausschnitt liegt in der übermäßigen Länge des zusammengesetzten Indexindex:

KEY `index` (`parent_menu_id`,`menu_link`,`plugin`,`alias`)
Nach dem Login kopieren

Lösung

Um diesen Fehler zu beheben, beachten Sie Folgendes:

1. Indexlänge optimieren:

  • Lange VARCHAR-Spalten sollten aufgrund umfangreicher und ineffizienter Indizes im Allgemeinen nicht indiziert werden.
  • Verwenden Sie Präfixindizes, um nur eine Teilmenge der Daten zu indizieren ist typischerweise viel kürzer als die volle Länge des Spalte.
KEY `index` (`parent_menu_id`,`menu_link`(50),`plugin`(50),`alias`(50))
Nach dem Login kopieren

2. Bestimmen Sie die optimale Präfixlänge:

Verwenden Sie die folgende Abfrage, um die optimale Präfixlänge für eine bestimmte Spalte zu bestimmen:

SELECT
 ROUND(SUM(LENGTH(`menu_link`)<10)*100/COUNT(`menu_link`),2) AS pct_length_10,
 ROUND(SUM(LENGTH(`menu_link`)<20)*100/COUNT(`menu_link`),2) AS pct_length_20,
 ROUND(SUM(LENGTH(`menu_link`)<50)*100/COUNT(`menu_link`),2) AS pct_length_50,
 ROUND(SUM(LENGTH(`menu_link`)<100)*100/COUNT(`menu_link`),2) AS pct_length_100
FROM `pds_core_menu_items`;
Nach dem Login kopieren

Zum Beispiel, wenn die Abfrage Folgendes zurückgibt:

+---------------+---------------+---------------+----------------+
| pct_length_10 | pct_length_20 | pct_length_50 | pct_length_100 |
+---------------+---------------+---------------+----------------+
|         21.78 |         80.20 |        100.00 |         100.00 |
+---------------+---------------+---------------+----------------+
Nach dem Login kopieren

Es zeigt an, dass 80 % der Zeichenfolgen weniger als 20 Zeichen lang sind, also eine Präfixlänge von 50 ausreichend.

3. INT-Datentypen anpassen:

Der INT-Datentyp gefolgt von einem numerischen Argument (z. B. INT(1)) hat keinen Einfluss auf die Speicherung oder den Wertebereich. INT-Datentypen belegen immer 4 Bytes und erlauben Werte im Bereich von -2147483648 bis 2147483647. Das numerische Argument wirkt sich nur auf das Auffüllen während der Anzeige aus.

Das obige ist der detaillierte Inhalt vonWie löst man den MySQL-Fehler 1071: „Der angegebene Schlüssel war zu lang; die maximale Schlüssellänge beträgt 1000 Bytes'?. 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