767 bajtów w MySQL w wersji 5.6 (i wcześniejsze wersje), czy określone ograniczenie prefiksu dla tabel InnoDB. Tabele MyISAM mają długość 1000 bajtów. Ten limit został zwiększony do 3072 bajtów w MySQL w wersji 5.7 (i w górę).
Musisz również pamiętać, że jeśli ustawisz indeks na dużym znaku lub varchar
pole, które jest utf8mb4
zakodowane, musisz podzielić maksymalną długość prefiksu indeksu wynoszącą 767 bajtów (lub 3072 bajtów) przez 4, co daje 191 . Dzieje się tak, ponieważ maksymalna długość utf8mb4
znak ma cztery bajty. Dla utf8
znak byłby to trzy bajty, co dałoby maksymalną długość prefiksu indeksu wynoszącą 255 (lub minus null-terminator, 254 znaki).
Jedną z dostępnych opcji jest po prostu ustawienie niższego limitu na VARCHAR
pola.
Inna opcja (zgodnie z odpowiedź na ten problem ) jest pobranie podzbioru kolumny, a nie całej kwoty, tj.:
ALTER TABLE `mytable` ADD UNIQUE ( column1(15), column2(200) );
Dostosuj, ponieważ musisz uzyskać klucz do zastosowania, ale zastanawiam się, czy warto byłoby przejrzeć swój model danych pod kątem tej encji, aby zobaczyć, czy są możliwe ulepszenia, które pozwoliłyby wdrożyć zamierzone reguły biznesowe bez uderzania w ograniczenie MySQL .