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

Errore MySQL:specifica della chiave senza una lunghezza della chiave

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.

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