sql >> Databáze >  >> RDS >> Mysql

Chyba MySQL:specifikace klíče bez délky klíče

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



  1. Vkládání dat SQL Serveru do Salesforce pomocí kurzoru

  2. Vyberte náhodný řádek pro každou skupinu

  3. Pochopení rozdílů mezi Table a Transaction API

  4. 2 způsoby, jak vrátit řádky, které obsahují nealfanumerické znaky v PostgreSQL