#1071 - Specified key was too long; max key length is 767 bytes

Wenn ich ausgeführt den folgenden Befehl ein:

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

Habe ich diese Fehlermeldung:

#1071 - Specified key was too long; max key length is 767 bytes

Informationen über column1 und column2:

column1 varchar(20) utf8_general_ci
column2  varchar(500) utf8_general_ci

Ich denke varchar(20) benötigt nur 21 bytes, während varchar(500) erfordert nur 501 bytes. So ist die Summe der bytes 522, weniger als 767. Also, warum bekomme ich die Fehlermeldung?

#1071 - Specified key was too long; max key length is 767 bytes
Weil es nicht das 520 bytes, sondern, 2080 bytes, die weit über 767 bytes, die Sie tun könnten, spalte1 varchar(20) und spalte2 varchar(170). wenn Sie wollen ein Zeichen/byte-equiv verwenden latin1
ich denke, deine Rechnung ist ein wenig falsch hier. mysql verwendet 1 oder 2 zusätzlichen bytes, die zum aufzeichnen der Werte-Länge: 1 byte, wenn die Spalte, die maximale Länge ist 255 bytes oder weniger ist, 2, wenn es länger als 255 bytes ist. die utf8_general_ci Kodierung benötigt 3 Byte pro Zeichen also vom Datentyp varchar(20) verwendet 61 bytes varchar(500) verwendet 1502 bytes insgesamt 1563 bytes
mysql> select maxlen, character_set_name von information_schema.character_sets, wo character_set_name('latin1', 'utf8', 'utf8mb4'); maxlen | character_set_name ------ | ------------------- 1 | latin1 ------ | ------------------- 3 | utf8 ------ | ------------------- 4 | utf8mb4
'wenn Sie wollen ein Zeichen/byte-equiv verwenden latin1' Bitte nicht. Latin1 wirklich, wirklich saugt. Sie werden es bereuen.
stackoverflow.com/a/41890295/470749 für mich gearbeitet.

InformationsquelleAutor Steven | 2009-11-29

Schreibe einen Kommentar