767 bytes in MySQL versie 5.6 (en eerdere versies), is de vermelde prefixbeperking voor InnoDB-tabellen. Het is 1.000 bytes lang voor MyISAM-tabellen. Deze limiet is verhoogd tot 3072 bytes in MySQL-versie 5.7 (en hoger).
Je moet er ook rekening mee houden dat als je een index instelt op een big char of varchar
veld dat utf8mb4
. is gecodeerd, moet u de maximale lengte van het indexvoorvoegsel van 767 bytes (of 3072 bytes) delen door 4, wat resulteert in 191 . Dit komt omdat de maximale lengte van een utf8mb4
karakter is vier bytes. Voor een utf8
karakter zou het drie bytes zijn, wat resulteert in een maximale lengte van het indexvoorvoegsel van 255 (of minus null-terminator, 254 tekens).
Een optie die je hebt is om gewoon een ondergrens te plaatsen op je VARCHAR
velden.
Een andere optie (volgens de antwoord op dit probleem ) is om de subset van de kolom te krijgen in plaats van het volledige bedrag, d.w.z.:
ALTER TABLE `mytable` ADD UNIQUE ( column1(15), column2(200) );
Tweak als je de sleutel nodig hebt om toe te passen, maar ik vraag me af of het de moeite waard zou zijn om je datamodel met betrekking tot deze entiteit te herzien om te zien of er verbeteringen mogelijk zijn, waardoor je de beoogde bedrijfsregels kunt implementeren zonder de MySQL-beperking te raken .