767 byte in MySQL versione 5.6 (e versioni precedenti), è la limitazione del prefisso dichiarata per le tabelle InnoDB. È lungo 1.000 byte per le tabelle MyISAM. Questo limite è stato aumentato a 3072 byte in MySQL versione 5.7 (e verso l'alto).
Devi anche essere consapevole del fatto che se imposti un indice su un carattere grande o varchar
campo che è utf8mb4
codificato, devi dividere la lunghezza massima del prefisso dell'indice di 767 byte (o 3072 byte) per 4 risultando in 191 . Questo perché la lunghezza massima di un utf8mb4
il carattere è di quattro byte. Per un utf8
carattere sarebbe tre byte con conseguente lunghezza massima del prefisso dell'indice di 255 (o meno null-terminator, 254 caratteri).
Un'opzione che hai è semplicemente inserire un limite inferiore sul tuo VARCHAR
campi.
Un'altra opzione (secondo la risposta a questo problema ) è quello di ottenere il sottoinsieme della colonna anziché l'intero importo, ovvero:
ALTER TABLE `mytable` ADD UNIQUE ( column1(15), column2(200) );
Modifica perché devi ottenere la chiave da applicare, ma mi chiedo se varrebbe la pena rivedere il tuo modello di dati relativo a questa entità per vedere se sono possibili miglioramenti, che ti permetterebbero di implementare le regole di business previste senza colpire la limitazione di MySQL .