Mysql
 sql >> Database >  >> RDS >> Mysql

Errore MySQL n. 1071 - La chiave specificata era troppo lunga; la lunghezza massima della chiave è 767 byte

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 .