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

Грешка в MySQL:спецификация на ключ без дължина на ключа

Грешката се случва, защото 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) просто няма да работи.

Грешката също ще се появи, когато се опитате да конвертирате колона на таблица от non-TEXT и non-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 поле.

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Зареждане на класа com.mysql.jdbc.Driver ... е отхвърлено съобщение

  2. PHP и mySQL:Бъг от 2038 г.:Какво е това? Как да го реша?

  3. Как да покажа дата като iso 8601 формат с PHP

  4. Защитени файлове за изтегляне

  5. MySQL - преброяване на общия брой редове в php