Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL-Fehler Nr. 1071 – Der angegebene Schlüssel war zu lang; Die maximale Schlüssellänge beträgt 767 Byte

767 Bytes in MySQL-Version 5.6 (und früheren Versionen) ist die angegebene Präfixbeschränkung für InnoDB-Tabellen. Es ist 1.000 Byte lang für MyISAM-Tabellen. Dieses Limit wurde in MySQL-Version 5.7 auf 3072 Byte erhöht (und aufwärts).

Sie müssen sich auch darüber im Klaren sein, wenn Sie einen Index auf ein großes Zeichen oder varchar setzen Feld, das utf8mb4 ist codiert, müssen Sie die maximale Indexpräfixlänge von 767 Byte (oder 3072 Byte) durch 4 teilen, was 191 ergibt . Dies liegt daran, dass die maximale Länge eines utf8mb4 Zeichen ist vier Bytes. Für ein utf8 Zeichen wären es drei Bytes, was zu einer maximalen Indexpräfixlänge von 255 führt (oder minus Null-Terminator, 254 Zeichen).

Eine Option, die Sie haben, besteht darin, einfach eine untere Grenze für Ihren VARCHAR festzulegen Felder.

Eine weitere Option (gemäß der Antwort auf dieses Problem ). ) soll die Teilmenge der Spalte und nicht die gesamte Menge erhalten, d. h.:

ALTER TABLE `mytable` ADD UNIQUE ( column1(15), column2(200) );

Passen Sie an, wie Sie den Schlüssel zum Anwenden erhalten müssen, aber ich frage mich, ob es sich lohnen würde, Ihr Datenmodell in Bezug auf diese Entität zu überprüfen, um zu sehen, ob Verbesserungen möglich sind, die es Ihnen ermöglichen würden, die beabsichtigten Geschäftsregeln zu implementieren, ohne die MySQL-Einschränkung zu treffen .