Błąd występuje, ponieważ MySQL może indeksować tylko pierwszych N znaków bloku BLOB lub TEXT
kolumna. Więc błąd występuje głównie, gdy istnieje typ pola/kolumny TEXT
lub BLOB lub te należą do TEXT
lub BLOB
typy takie jak TINYBLOB
, MEDIUMBLOB
, LONGBLOB
, TINYTEXT
, MEDIUMTEXT
i LONGTEXT
że próbujesz utworzyć klucz podstawowy lub indeks. Z pełnym BLOB
lub TEXT
bez wartości długości MySQL nie jest w stanie zagwarantować niepowtarzalności kolumny, ponieważ ma ona zmienny i dynamiczny rozmiar. Tak więc, używając BLOB
lub TEXT
typów jako indeksu, należy podać wartość N, aby MySQL mógł określić długość klucza. Jednak MySQL nie obsługuje limitu długości klucza w TEXT
lub BLOB
. TEXT(88)
po prostu nie zadziała.
Błąd pojawi się również, gdy spróbujesz przekonwertować kolumnę tabeli z non-TEXT
i non-BLOB
wpisz np. VARCHAR
i ENUM
w TEXT
lub BLOB
typ, z kolumną już zdefiniowaną jako unikatowe ograniczenia lub indeks. Polecenie Alter Table SQL nie powiedzie się.
Rozwiązaniem problemu jest usunięcie TEXT
lub BLOB
kolumny z indeksu lub ograniczenia przez unikalność albo ustaw inne pole jako klucz podstawowy. Jeśli nie możesz tego zrobić, a chcesz nałożyć limit na TEXT
lub BLOB
kolumna, spróbuj użyć VARCHAR
wpisz i umieść na nim limit długości. Domyślnie VARCHAR
jest ograniczony do maksymalnie 255 znaków, a jego limit musi być określony niejawnie w nawiasie tuż po jego deklaracji, tj. VARCHAR(200)
ograniczy to tylko do 200 znaków.
Czasami, nawet jeśli nie używasz TEXT
lub BLOB
powiązanego typu w tabeli, może również pojawić się błąd 1170. Dzieje się tak w sytuacji, gdy podasz VARCHAR
kolumna jako klucz podstawowy, ale błędnie ustawiłeś jej długość lub rozmiar znaków. VARCHAR
może akceptować tylko do 256 znaków, więc wszystko, jak VARCHAR(512)
zmusi MySQL do automatycznej konwersji VARCHAR(512)
do SMALLTEXT
datatype, który następnie kończy się niepowodzeniem z błędem 1170 na długości klucza, jeśli kolumna jest używana jako klucz główny lub unikalny lub nieunikalny indeks. Aby rozwiązać ten problem, określ liczbę mniejszą niż 256 jako rozmiar VARCHAR
pole.
Numer referencyjny:Błąd MySQL 1170 (42000):Kolumna BLOB/TEXT użyta w specyfikacji klucza bez długości klucza