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
Susan SarandonOriginal
2024-12-13 19:21:10690Durchsuche

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`)

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))

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`;

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 |
+---------------+---------------+---------------+----------------+

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!

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