lunedì 6 agosto 2018

Chiave univoca mysql troppo lunga

Non troppo tempo fa mi sono trovato a dover convertire un database mysql da latin swedish ci al più prestante ed universale utf8 general ci.
A parte i vari problemi di conversione per via di charset salvati in maniera magari errata, mi sono ritrovato davanti ad un errore improvviso mysql:

"Specified key was too long; max key length is xxx bytes".

In buona sostanza, cercando su internet ho poi scoperto che le chiavi mysql, in questo caso una chiave univoca, possono essere lunghe massimo 1000 caratteri.
Il fatto che tutto prima del cambio di charset funzionasse è dovuto sostanzialmente al fatto che latin ed utf8 occupano diverso spazio in bytes per il salvataggio.

Comunque, cercando un po' su internet, ho per fortuna trovato la soluzione al problema della chiave mysql troppo lunga, vediamo subito di cosa si tratta.


Come risolvere il problema della chiave univoca mysql troppo lunga

Per poter evitare il terribile errore "Specified key was too long; max key length is xxx bytes" sulle chiavi mysql, si può agire sostanzialmente in tre modi.

La prima soluzione è la più semplice e forse veloce, anche se magari non sempre attuabile: bisogna ridurre la lunghezza dei campi che compongono la chiave.

Ad esempio, se un campo nome di una ipotetica tabella mysql è stato creato di tipo varchar(255), magari è il caso di ottimizzare le risorse e di farlo ad esempio varchar(100).

Se però non è possibile agire direttamente sulla lunghezza dei campi perchè sono già troppo corti, allora si può agire sulla lunghezza massima della chiave mysql generata.
Ecco un esempio di come poter fare:

ALTER TABLE `tabella` ADD UNIQUE ( campo1(50), campo2(100) );

Infine, un'altra possibile soluzione per questo antipatico errore mysql è quella di ridurre il numero di campi dell'indice univoco.
Anche in questo caso ovviamente, non è sempre possibile farlo.

A seconda dunque della versione di mysql in uso e della lunghezza massima degli indici, potrebbe essere necessario dover rivedere la logica su come sono stati costruiti i campi delle tabelle del database, o le key stesse.

Piaciuto l'articolo? Lascia un commento!

EmoticonEmoticon