2009-10-03 5 views
0

Je crée une table pour contenir des éléments des flux rss et j'ai besoin de créer une colonne 'description'. J'ai sélectionné le type de données comme TEXT sans limite définie sans index sur cette colonne. Ceci est l'erreur que je reçois:Impossible de créer une colonne dans la base de données MySQL avec le type de données TEXT

#1071 - Specified key was too long; max key length is 1000 bytes 

Si je choisis d'indexer cette colonne, je reçois ce message d'erreur:

#1170 - BLOB/TEXT column 'description' used in key specification without a key length 

Toute longueur je précise pour cette colonne retourne la première erreur que je suis arrivé . Quelqu'un peut-il me dire ce que je fais mal? Merci!

MISE À JOUR:

J'utilise MySQL 5.0.4

Voici la requête que je utilise pour créer la table:

CREATE TABLE `feed_items` (

`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY , 
`feed_id` INT NOT NULL COMMENT '`feeds`.`id`', 
`guid` VARCHAR(255) NOT NULL , 
`publish_date` DATETIME NOT NULL , 
`update_of` INT NULL COMMENT '`feed_items`.`id`', 
`link` VARCHAR(255) NOT NULL , 
`title` VARCHAR(255) NOT NULL , 
`description` TEXT NOT NULL , 
`comments_link` VARCHAR(255) NULL , 
INDEX ( `feed_id` , `guid` , `publish_date` , `update_of` , `title`) 
) ENGINE = MYISAM 
+1

Quelle longueur essayez-vous d'utiliser? Pouvez-vous montrer votre commande pour créer la colonne? Quelle version de MySQL? –

+0

L'instruction CREATE TABLE peut être utile –

+0

J'utilise 5.0.4. Voici la requête: CREATE TABLE 'feed_items' ( ' id' INT NON NULL AUTO_INCREMENT PRIMARY KEY, 'feed_id' INT NOT NULL COMMENTAIRE' 'feeds'.'Id' », ' guid' VARCHAR (255) NOT NULL, ' publish_date' DATETIME NOT NULL, 'update_of' INT NULL COMMENTAIRE '' feed_items'.'id'', ' link' VARCHAR (255) PAS NULL, 'title' VARCHAR (255) NOT NULL, ' description' TEXTE NON NULL, 'comments_link' VARCHAR (255) NULL, INDEX ('feed_id',' guid', 'date_diffusion',' update_of', 'title') ) ENGINE = MYISAM – Kylee

Répondre

1

Même si elle était d'un certain temps, Ce rapport de bug semble être ce que vous avez un problème avec: http://bugs.mysql.com/bug.php?id=4541

Vous voudrez peut-être lire les commentaires sur ce bug, et voyez s'ils se réfèrent à votre situation, car il est difficile de vous aider sans voir quelle commande vous avez utilisée pour obtenir cette erreur, ni savoir quelle version de mysql.

MISE À JOUR: D'après votre requête, vous pouvez vouloir supprimer ce premier:

INDEX ( `feed_id` , `guid` , `publish_date` , `update_of` , `title`) 

Ensuite, essayez de faire:

INDEX ( `feed_id`) 

Quand je vois un long index comme celui-ci je reçois suspect.

Idéalement, vous devriez indexer ce que vous allez faire sur sélectionne, sauf si vous avez

SELECT * FROM table WHERE feed_id=? AND guid=? AND publish_date=? AND update_of=? and title=? 

alors cet indice est inutile. Puisque feed_id est une clé primaire, vous devez simplement le faire

SELECT * FROM table where feed_id=? 

car elle retournera une ligne de façon unique. Donc, l'indice que j'ai ci-dessus serait ce qui est nécessaire. Vous pouvez également vouloir un index séparé sur le titre et peut-être publish_date.

Regardez quelles requêtes vous écrivez, vous pouvez alors déterminer où les index devraient être. Les index deviendront chers à mesure que vous ajouterez plus de lignes, donc vous ne voulez pas trop indexer, mais indexer trop peu est inutile, c'est pourquoi je vous suggère de regarder les requêtes puis de décider où avoir des index.

+0

J'ai posté des informations mises à jour dans la question. L'erreur indique que la longueur maximale de la clé est 1000. Je suppose que la clé signifie que la colonne est indexée mais que la colonne de description n'a aucun index. Ai-je tort dans cette hypothèse? Mon expérience avec la conception de base de données est limitée. Merci! – Kylee

+1

Vous pouvez essayer d'abréger votre index. À moins que vous ne fassiez des sélections sur tout cela en même temps, je m'attends à ce que ce soit votre problème. –

+0

C'est ce qu'il a fait. Réduire les index. J'ai supprimé les index des colonnes que je ne ferais pas un SELECT sur la majorité du temps. Merci! – Kylee

Questions connexes