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

Błąd MySQL #1071 — Określony klucz był za długi; maksymalna długość klucza to 767 bajtów

767 bajtów w MySQL w wersji 5.6 (i wcześniejsze wersje), czy określone ograniczenie prefiksu dla tabel InnoDB. Tabele MyISAM mają długość 1000 bajtów. Ten limit został zwiększony do 3072 bajtów w MySQL w wersji 5.7 (i w górę).

Musisz również pamiętać, że jeśli ustawisz indeks na dużym znaku lub varchar pole, które jest utf8mb4 zakodowane, musisz podzielić maksymalną długość prefiksu indeksu wynoszącą 767 bajtów (lub 3072 bajtów) przez 4, co daje 191 . Dzieje się tak, ponieważ maksymalna długość utf8mb4 znak ma cztery bajty. Dla utf8 znak byłby to trzy bajty, co dałoby maksymalną długość prefiksu indeksu wynoszącą 255 (lub minus null-terminator, 254 znaki).

Jedną z dostępnych opcji jest po prostu ustawienie niższego limitu na VARCHAR pola.

Inna opcja (zgodnie z odpowiedź na ten problem ) jest pobranie podzbioru kolumny, a nie całej kwoty, tj.:

ALTER TABLE `mytable` ADD UNIQUE ( column1(15), column2(200) );

Dostosuj, ponieważ musisz uzyskać klucz do zastosowania, ale zastanawiam się, czy warto byłoby przejrzeć swój model danych pod kątem tej encji, aby zobaczyć, czy są możliwe ulepszenia, które pozwoliłyby wdrożyć zamierzone reguły biznesowe bez uderzania w ograniczenie MySQL .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Gdzie zmienić wartość small_case_table_names=2 w systemie Windows xampp

  2. trzeba zwrócić dwa zestawy danych z dwoma różnymi klauzulami where

  3. Amazon EC2, mysql przerywa start, ponieważ InnoDB:mmap (x bajtów) nie powiodło się; errno 12

  4. DOŁĄCZENIE do MySQL czy UŻYWANIE?

  5. MySQL tworzy składnię procedury składowanej z ogranicznikiem