767 byte i MySQL version 5.6 (och tidigare versioner), är den angivna prefixbegränsningen a> för InnoDB-tabeller. Den är 1 000 byte lång för MyISAM-tabeller. Denna gräns har höjts till 3072 byte i MySQL version 5.7 (och uppåt).
Du måste också vara medveten om att om du ställer in ett index på en stor char eller varchar
fält som är utf8mb4
kodad måste du dividera den maximala indexprefixlängden på 767 byte (eller 3072 byte) med 4 vilket resulterar i 191 . Detta beror på att den maximala längden på en utf8mb4
tecknet är fyra byte. För en utf8
tecken skulle det vara tre byte vilket resulterar i maximal indexprefixlängd på 255 (eller minus null-terminator, 254 tecken).
Ett alternativ du har är att bara sätta en nedre gräns på din VARCHAR
fält.
Ett annat alternativ (enligt svaret på det här problemet ) är att få delmängden av kolumnen snarare än hela beloppet, dvs.:
ALTER TABLE `mytable` ADD UNIQUE ( column1(15), column2(200) );
Justera som du behöver för att få nyckeln att tillämpa, men jag undrar om det skulle vara värt det att granska din datamodell angående denna enhet för att se om det finns förbättringar möjliga, vilket skulle tillåta dig att implementera de avsedda affärsreglerna utan att träffa MySQL-begränsningen .