Mysql
 sql >> база данни >  >> RDS >> Mysql

Грешка в MySQL #1071 - Посоченият ключ беше твърде дълъг; максималната дължина на ключа е 767 байта

767 байта в MySQL версия 5.6 (и предишни версии), е посоченото ограничение за префикса за таблици InnoDB. Той е дълъг 1000 байта за MyISAM таблици. Това ограничение е увеличено до 3072 байта в MySQL версия 5.7 (и нагоре).

Трябва също да сте наясно, че ако зададете индекс на голям char или varchar поле, което е utf8mb4 кодирани, трябва да разделите максималната дължина на индексния префикс от 767 байта (или 3072 байта) на 4, което води до 191 . Това е така, защото максималната дължина на utf8mb4 символът е четири байта. За utf8 символ ще бъде три байта, което води до максимална дължина на префикса на индекса от 255 (или минус нулев терминатор, 254 знака).

Една опция, която имате, е просто да поставите долна граница на вашия VARCHAR полета.

Друг вариант (според отговора на този проблем ) е да получите подмножеството на колоната, а не цялата сума, т.е.:

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

Настройте, тъй като имате нужда, за да получите ключа, за да приложите, но се чудя дали си струва да прегледате модела си на данни по отношение на този обект, за да видите дали има възможни подобрения, които ще ви позволят да приложите предвидените бизнес правила, без да удряте ограничението на 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. Как да добавя функция levenshtein в mysql?

  2. Как да конвертирам времеви отпечатък в дата и час в MySQL?

  3. Enum в Hibernate, запазващ се като enum

  4. Как да премахнете нежеланите водещи знаци от низ в MySQL

  5. Меню на дърво за изграждане на PHP / MySQL