767 байта в MySQL версия 5.6 (и предишни версии), е посоченото ограничение за префикса за таблици InnoDB. Той е дълъг 1000 байта за MyISAM таблици. Това ограничение е увеличено до 3072 байта в MySQL версия 5.7 (и нагоре).
Трябва също да сте наясно, че ако зададете индекс на голям char или varchar
поле, което е utf8mb4
кодирани, трябва да разделите максималната дължина на индексния префикс от 767 байта (или 3072 байта) на 4, което води до 191 . Това е така, защото максималната дължина на utf8mb4
символът е четири байта. За utf8
символ ще бъде три байта, което води до максимална дължина на префикса на индекса от 255 (или минус нулев терминатор, 254 знака).
Една опция, която имате, е просто да поставите долна граница на вашия VARCHAR
полета.
Друг вариант (според отговора на този проблем ) е да получите подмножеството на колоната, а не цялата сума, т.е.:
ALTER TABLE `mytable` ADD UNIQUE ( column1(15), column2(200) );
Настройте, тъй като имате нужда, за да получите ключа, за да приложите, но се чудя дали си струва да прегледате модела си на данни по отношение на този обект, за да видите дали има възможни подобрения, които ще ви позволят да приложите предвидените бизнес правила, без да удряте ограничението на MySQL .