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

Грешка в MySQL 1170 (42000):колона BLOB/TEXT, използвана в спецификацията на ключа без дължина на ключа

Когато създавате нова таблица или променяте съществуваща таблица с първични ключове, уникални ограничения и индекси, или когато дефинирате нов индекс с оператор за манипулиране на Alter Table в базата данни на MySQL, може да възникне следната грешка и да забрани завършването на командата:

ГРЕШКА 1170 (42000):колона BLOB/TEXT „име_на поле“, използвана в спецификацията на ключа без дължина на ключа

Грешката се случва, защото MySQL може да индексира само първите N символа на колона BLOB или TEXT. Така че грешката се случва главно, когато има тип поле/колона TEXT или BLOB или те принадлежат към типове TEXT или BLOB като TINYBLOB, MEDIUMBLOB, LONGBLOB, TINYTEXT, MEDIUMTEXT и LONGTEXT, които се опитвате да направите като първичен ключ или индекс. С пълен BLOB или TEXT без стойността на дължината, MySQL не е в състояние да гарантира уникалността на колоната, тъй като е с променлив и динамичен размер. Така че, когато използвате типове BLOB или TEXT като индекс, стойността на N трябва да бъде предоставена, така че MySQL да може да определи дължината на ключа. MySQL обаче не поддържа ограничение за TEXT или BLOB. TEXT(88) просто няма да работи.

Грешката също ще се появи, когато се опитате да конвертирате колона на таблица от не-TEXT и не-BLOB тип, като VARCHAR и ENUM в тип TEXT или BLOB, като колоната вече е дефинирана като уникални ограничения или индекс. Командата Alter Table SQL няма да успее.

Решението на проблема е да премахнете колоната TEXT или BLOB от индекса или уникалното ограничение или да зададете друго поле като първичен ключ. Ако не можете да направите това и искате да поставите ограничение на колоната TEXT или BLOB, опитайте да използвате тип VARCHAR и поставете ограничение за дължина върху него. По подразбиране VARCHAR е ограничен до максимум 255 знака и ограничението му трябва да се посочи неявно в скоба непосредствено след декларацията му, т.е. VARCHAR(200) ще го ограничи само до 200 знака.

Понякога, въпреки че не използвате тип, свързан с TEXT или BLOB във вашата таблица, може да се появи и грешка 1170. Това се случва в ситуация, като например когато посочите колона VARCHAR като първичен ключ, но погрешно зададете нейната дължина или размера на знаците. VARCHAR може да приема само до 256 знака, така че всичко като VARCHAR(512) ще принуди MySQL автоматично да преобразува VARCHAR(512) в тип данни SMALLTEXT, което впоследствие се провали с грешка 1170 на дължината на ключа, ако колоната се използва като основна ключ или уникален или неуникален индекс. За да разрешите този проблем, посочете цифра по-малка от 256 като размер на полето 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. Инсталиране и конфигуриране на MySQL на Ubuntu 20.04

  2. Множество броя с различни условия в една MySQL заявка

  3. Как да оптимизираме MySQL/MariaDB таблици

  4. MySQL:чувствителен ли е регистърът на буквите в израза SELECT?

  5. Отказ на база данни за уебсайтове на WordPress