L'errore si verifica perché MySQL può indicizzare solo i primi N caratteri di un BLOB o TEXT
colonna. Quindi l'errore si verifica principalmente quando c'è un tipo di campo/colonna di TEXT
o BLOB o quelli appartengono a TEXT
o BLOB
tipi come TINYBLOB
, MEDIUMBLOB
, LONGBLOB
, TINYTEXT
, MEDIUMTEXT
e LONGTEXT
che si tenta di creare una chiave primaria o un indice. Con BLOB
completo o TEXT
senza il valore della lunghezza, MySQL non è in grado di garantire l'unicità della colonna in quanto è di dimensioni variabili e dinamiche. Quindi, quando usi BLOB
o TEXT
tipi come un indice, il valore di N deve essere fornito in modo che MySQL possa determinare la lunghezza della chiave. Tuttavia, MySQL non supporta un limite di lunghezza della chiave su TEXT
o BLOB
. TEXT(88)
semplicemente non funzionerà.
L'errore apparirà anche quando tenti di convertire una colonna di una tabella da non-TEXT
e non-BLOB
tipo come VARCHAR
e ENUM
in TEXT
o BLOB
tipo, con la colonna già definita come vincoli o indice univoci. Il comando Alter Table SQL avrà esito negativo.
La soluzione al problema è rimuovere il TEXT
o BLOB
colonna dall'indice o dal vincolo univoco o impostare un altro campo come chiave primaria. Se non puoi farlo e vuoi porre un limite al TEXT
o BLOB
colonna, prova a utilizzare VARCHAR
digitare e inserire un limite di lunghezza su di esso. Per impostazione predefinita, VARCHAR
è limitato a un massimo di 255 caratteri e il suo limite deve essere specificato implicitamente tra parentesi subito dopo la sua dichiarazione, ovvero VARCHAR(200)
lo limiterà a soli 200 caratteri.
A volte, anche se non usi TEXT
o BLOB
tipo correlato nella tabella, potrebbe essere visualizzato anche l'errore 1170. Succede in una situazione come quando specifichi VARCHAR
colonna come chiave primaria, ma ha impostato erroneamente la lunghezza o la dimensione dei caratteri. VARCHAR
può accettare solo fino a 256 caratteri, quindi qualsiasi cosa come VARCHAR(512)
forzerà MySQL a convertire automaticamente il VARCHAR(512)
a un SMALLTEXT
tipo di dati, che successivamente non riesce con l'errore 1170 sulla lunghezza della chiave se la colonna viene utilizzata come chiave primaria o indice univoco o non univoco. Per risolvere questo problema, specifica una cifra inferiore a 256 come dimensione per VARCHAR
campo.