Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Błąd MySQL 1170 (42000):Kolumna BLOB/TEKST użyta w specyfikacji klucza bez długości klucza

Podczas tworzenia nowej tabeli lub zmiany istniejącej tabeli z kluczami podstawowymi, unikalnymi ograniczeniami i indeksami lub podczas definiowania nowego indeksu za pomocą instrukcji manipulacji Alter Table w bazie danych MySQL, może wystąpić następujący błąd i uniemożliwić wykonanie polecenia:

BŁĄD 1170 (42000):Kolumna BLOB/TEXT „nazwa_pola” użyta w specyfikacji klucza bez długości klucza

Błąd występuje, ponieważ MySQL może indeksować tylko pierwsze N ​​znaków kolumny BLOB lub TEXT. Tak więc błąd występuje głównie, gdy istnieje typ pola/kolumny TEXT lub BLOB lub te należące do typów TEXT lub BLOB, takich jak TINYBLOB, MEDIUMBLOB, LONGBLOB, TINYTEXT, MEDIUMTEXT i LONGTEXT, które próbujesz utworzyć jako klucz podstawowy lub indeks. Z pełnym BLOBem lub TEKSTEM 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, gdy używasz typów BLOB lub TEXT jako indeksu, należy podać wartość N, aby MySQL mógł określić długość klucza. Jednak MySQL nie obsługuje limitu na TEXT lub BLOB. TEKST(88) po prostu nie zadziała.

Błąd pojawi się również, gdy spróbujesz przekonwertować kolumnę tabeli z typu innego niż TEXT i typu innego niż BLOB, takiego jak VARCHAR i ENUM, na typ TEXT lub BLOB, przy czym kolumna została już zdefiniowana jako unikatowe ograniczenia lub indeks. Polecenie Alter Table SQL nie powiedzie się.

Rozwiązaniem problemu jest usunięcie kolumny TEXT lub BLOB z indeksu lub ograniczenia przez unikalność albo ustawienie innego pola jako klucza podstawowego. Jeśli nie możesz tego zrobić, a chcesz ustawić limit na kolumnę TEXT lub BLOB, spróbuj użyć typu VARCHAR 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 domyślnie w nawiasie tuż po jego deklaracji, tj. VARCHAR(200) ograniczy go tylko do 200 znaków.

Czasami, nawet jeśli nie używasz typu TEKST lub BLOB w swojej tabeli, może również pojawić się Błąd 1170. Dzieje się tak w sytuacji, gdy jako klucz podstawowy określisz kolumnę VARCHAR, ale błędnie ustawisz jej długość lub wielkość znaków. VARCHAR może akceptować tylko do 256 znaków, więc wszystko takie jak VARCHAR (512) zmusi MySQL do automatycznej konwersji VARCHAR (512) na typ danych SMALLTEXT, który następnie kończy się niepowodzeniem z błędem 1170 na długości klucza, jeśli kolumna jest używana jako podstawowa klucz lub unikalny lub nieunikalny indeks. Aby rozwiązać ten problem, określ liczbę mniejszą niż 256 jako rozmiar pola VARCHAR.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Przykłady instrukcji JDBC — wstaw, usuń, zaktualizuj, wybierz rekord

  2. mysqli_stmt::bind_param():Liczba elementów w ciągu definicji typu nie odpowiada liczbie zmiennych wiązania

  3. Wyjaśnienie MySQL IFNULL()

  4. Neo4j - Usuń węzeł za pomocą Cypher

  5. Warunek WHERE w MySQL z 16 różnymi przykładami zapytań