K chybě dochází, protože MySQL může indexovat pouze prvních N znaků BLOB nebo TEXT
sloupec. K chybě tedy dochází hlavně v případě, že existuje typ pole/sloupce TEXT
nebo BLOB nebo ty patří do TEXT
nebo BLOB
typy jako TINYBLOB
, MEDIUMBLOB
, LONGBLOB
, TINYTEXT
, MEDIUMTEXT
a LONGTEXT
že se pokusíte vytvořit primární klíč nebo index. S úplným BLOB
nebo TEXT
bez hodnoty délky nemůže MySQL zaručit jedinečnost sloupce, protože má proměnnou a dynamickou velikost. Takže při použití BLOB
nebo TEXT
typů jako index, musí být zadána hodnota N, aby MySQL mohla určit délku klíče. MySQL však nepodporuje omezení délky klíče u TEXT
nebo BLOB
. TEXT(88)
prostě nebude fungovat.
Chyba se také objeví, když se pokusíte převést sloupec tabulky z non-TEXT
a non-BLOB
zadejte jako VARCHAR
a ENUM
do TEXT
nebo BLOB
typu, přičemž sloupec již byl definován jako jedinečná omezení nebo index. Příkaz Alter Table SQL se nezdaří.
Řešením problému je odstranění TEXT
nebo BLOB
sloupec z indexu nebo jedinečného omezení nebo nastavte jiné pole jako primární klíč. Pokud to nemůžete udělat a chcete nastavit limit na TEXT
nebo BLOB
zkuste použít VARCHAR
zadejte a umístěte na něj limit délky. Ve výchozím nastavení VARCHAR
je omezena na maximálně 255 znaků a její limit musí být uveden implicitně v závorce hned za deklarací, tj. VARCHAR(200)
omezí to pouze na 200 znaků.
Někdy, i když nepoužíváte TEXT
nebo BLOB
související typ ve vaší tabulce, může se také objevit chyba 1170. Stává se to v situaci, jako když zadáte VARCHAR
sloupec jako primární klíč, ale nesprávně nastavená jeho délka nebo velikost znaků. VARCHAR
může přijímat pouze až 256 znaků, takže cokoliv jako VARCHAR(512)
donutí MySQL automaticky převést VARCHAR(512)
na SMALLTEXT
datový typ, který následně selže s chybou 1170 délky klíče, pokud je sloupec použit jako primární klíč nebo jedinečný či nejedinečný index. Chcete-li tento problém vyřešit, zadejte jako velikost VARCHAR
hodnotu menší než 256 pole.
Reference:Chyba MySQL 1170 (42000):Sloupec BLOB/TEXT použitý ve specifikaci klíče bez délky klíče