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

Errore MySQL 1170 (42000):colonna BLOB/TEXT utilizzata nella specifica chiave senza una lunghezza della chiave

Quando si crea una nuova tabella o si altera una tabella esistente con chiavi primarie, vincoli e indici univoci, o quando si definisce un nuovo indice con l'istruzione di manipolazione Alter Table nel database MySQL, potrebbe verificarsi il seguente errore e impedire il completamento del comando:

ERRORE 1170 (42000):colonna BLOB/TEXT 'nome_campo' utilizzata nella specifica della chiave senza una lunghezza della chiave

L'errore si verifica perché MySQL può indicizzare solo i primi N caratteri di una colonna BLOB o TEXT. Quindi l'errore si verifica principalmente quando c'è un tipo di campo/colonna di TEXT o BLOB o quelli che appartengono a tipi di TEXT o BLOB come TINYBLOB, MEDIUMBLOB, LONGBLOB, TINYTEXT, MEDIUMTEXT e LONGTEXT che si tenta di creare come chiave primaria o indice. Con BLOB o TEXT completi senza il valore di lunghezza, MySQL non è in grado di garantire l'unicità della colonna poiché è di dimensioni variabili e dinamiche. Pertanto, quando si utilizzano i tipi BLOB o TEXT come indice, è necessario fornire il valore di N in modo che MySQL possa determinare la lunghezza della chiave. Tuttavia, MySQL non supporta il limite su TEXT o BLOB. TEXT(88) semplicemente non funzionerà.

L'errore verrà visualizzato anche quando si tenta di convertire una colonna di tabella da un tipo non TESTO e non BLOB come VARCHAR ed ENUM in tipo TEXT o BLOB, con la colonna già definita come vincoli o indice univoci. Il comando Alter Table SQL avrà esito negativo.

La soluzione al problema consiste nel rimuovere la colonna TEXT o BLOB dall'indice o dal vincolo univoco oppure impostare un altro campo come chiave primaria. Se non puoi farlo e vuoi inserire un limite nella colonna TEXT o BLOB, prova a usare il tipo VARCHAR e metti 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 utilizzi il tipo correlato TEXT o BLOB nella tabella, potrebbe essere visualizzato anche l'errore 1170. Succede in situazioni come quando si specifica la colonna VARCHAR come chiave primaria, ma si imposta 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 VARCHAR(512) in un tipo di dati SMALLTEXT, che successivamente fallisce con l'errore 1170 sulla lunghezza della chiave se la colonna viene utilizzata come primaria chiave o indice univoco o non univoco. Per risolvere questo problema, specificare una cifra inferiore a 256 come dimensione per il campo VARCHAR.