web-dev-qa-db-fra.com

créer une colonne de texte comme clé unique

je veux faire une table dans le serveur MySQL avec la colonne mediumtext comme UNIQUE KEY

CREATE TABLE `parts` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `name` mediumtext NOT NULL,
      `display_status` int(11) NOT NULL,
       UNIQUE KEY `name` (`name`),
       PRIMARY KEY (`id`)
 ) ENGINE=MyISAM DEFAULT CHARSET=utf8;

mais cela a fait une erreur

    BLOB/TEXT column 'name' used in key specification without a key length

quand je change le type de "nom" en varchar .. ça marche!

pouvez-vous dire si je peux faire une colonne de texte comme UNIQUE KEY

25
d-doctor

Fondamentalement, vous ne pouvez pas utiliser la colonne Text comme clé UNIQUE. Parce que pratiquement une si grande colonne ne sera pas unique et il pourrait y avoir plus de doublons. Optez donc pour la méthode hashing et utilisez cette sortie comme contrainte UNIQUE.

J'espère que cela vous aide

29
Mari

La limite de 255 pour la longueur varchar ne s'applique plus. De la documentation :

Les valeurs des colonnes VARCHAR sont des chaînes de longueur variable. La longueur peut être spécifiée sous la forme d'une valeur de 0 à 255 avant MySQL 5.0.3 et de 0 à 65 535 dans les versions 5.0.3 et ultérieures.

Les index uniques doivent avoir une longueur maximale connue (une exigence de mysql en raison de son implémentation interne), utilisez donc varchar avec une valeur suffisamment grande pour s'adapter à la valeur attendue la plus longue, par exemple

...
`name` varchar(65535) NOT NULL, -- for example 
...
24
Bohemian