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

Błąd MySQL:specyfikacja klucza bez długości klucza

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Czy mogę użyć przygotowanej instrukcji PDO do powiązania identyfikatora (nazwy tabeli lub pola) lub słowa kluczowego składni?

  2. Jak włączyć dziennik zapytań MySQL?

  3. Jak usunąć z zaznaczonych w MySQL?

  4. MySQL vs MySQLi podczas korzystania z PHP

  5. mysql - tworzenie mechanizmu podobnego do sekwencji Oracle