MySQL VARCHAR (255) UTF8 ist zu lang für Schlüssel, aber maximale Länge ist 1000 Bytes

Ich weiß, es wurden viele Fragen zu diesem Thema, aber ich denke, dass meine Mathe richtig ist.

  • MySQL behält sich 3 Byte pro UTF8-Zeichen.
  • InnoDB erlaubt Schlüssel der Länge 1000 bytes.
  • Meine UTF8 VARCHAR(255) sollte werden 255 * 3 = 765 bytes

Es sei denn, UNQUE erfordert eine zusätzliche 200+ Byte pro Eintrag, warum funktioniert das nicht?

mysql> ALTER TABLE entry ADD UNIQUE INDEX (name(255));
ERROR 1071 (42000): Specified key was too long; max key length is 1000 bytes

Kann ich irgendetwas dagegen tun?

EDIT:

Es stellt sich heraus, ist die Grenze 250. Es scheint chars zählen als 4 bytes für eindeutige Indizes, aber ich weiß nicht, warum.

EDIT 2:

Dank Vladislav Vaintroub, das charset ist in der Tat utf8mb4. Das löst das Rätsel. Ich hatte nicht gesehen, dass jegliche Dokumentation, die auf dieser änderung.

Ich vermute, es baut die non unique index implizit mit dem abschneiden von Feld, was nicht hinnehmbar ist für eindeutige Indizes, so dass es sich weigert.

Wenn Sie re-geben Sie Ihren Kommentar als eine Antwort wäre ich glücklich, es zu akzeptieren.

Lösung: Geben Sie utf8, nicht utf8mb4 (MySQL-Admin nicht erlauben, so erstellen Sie die Tabelle manuell)

Kommentar zu dem Problem
Lesen Sie auch dies : xaprb.com/blog/2006/04/17/max-key-length-in-mysql Kommentarautor: diEcho
Die erste sagt, dass man nicht speichern darf, 4 byte chars (ich bin nicht). Der zweite sagt VARCHAR(333) sollte in Ordnung sein, und ich versuche, VARCHAR(255). Kommentarautor: David Kanarek
Können Sie ausführen, "show create table-Eintrag"? Wäre interessant zu sehen, das charset. Neue mysql (5.5+) hat 4-byte-UTF8-namens utf8mb4, irgendwann vor der 5.5 Version ich glaube es hieß auch "utf8", aber dann wurde umbenannt in "utf8mb4" um Kompatibilitätsprobleme zu vermeiden. Kommentarautor: Vladislav Vaintroub

InformationsquelleAutor der Frage David Kanarek | 2011-05-30

Schreibe einen Kommentar