Грешката се случва, защото 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
поле.