767 bytes i MySQL version 5.6 (og tidligere versioner), er den angivne præfiksbegrænsning a> til InnoDB-tabeller. Den er 1.000 bytes lang for MyISAM-tabeller. Denne grænse er blevet øget til 3072 bytes i MySQL version 5.7 (og opad).
Du skal også være opmærksom på, at hvis du indstiller et indeks på en stor char eller varchar
felt, som er utf8mb4
kodet, skal du dividere den maksimale indekspræfikslængde på 767 bytes (eller 3072 bytes) med 4, hvilket resulterer i 191 . Dette skyldes, at den maksimale længde af en utf8mb4
karakter er fire bytes. For en utf8
tegn ville det være tre bytes, hvilket resulterer i maks. indekspræfikslængde på 255 (eller minus null-terminator, 254 tegn).
En mulighed, du har, er at placere den nedre grænse for din VARCHAR
felter.
En anden mulighed (ifølge svaret på dette problem ) er at få delmængden af kolonnen i stedet for hele beløbet, dvs.:
ALTER TABLE `mytable` ADD UNIQUE ( column1(15), column2(200) );
Tweak som du har brug for for at få nøglen til at anvende, men jeg spekulerer på, om det ville være det værd at gennemgå din datamodel vedrørende denne enhed for at se, om der er forbedringer mulige, som ville give dig mulighed for at implementere de tilsigtede forretningsregler uden at ramme MySQL-begrænsningen .