Erreur #1170 avec mysql lors de la création d'une base de donnée et quelques que [Résolu]

Messages postés
196
Date d'inscription
dimanche 23 janvier 2005
Statut
Membre
Dernière intervention
10 août 2009
- - Dernière réponse : neigedhiver
Messages postés
2483
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
- 4 juin 2007 à 00:57
Bonjour, à tous.
 Je débute dans les bases de données.
J'ai commencé avec mysql.

J'ai réussi à créér des bases de données mais parfois j'ai un message d'erreur et je ne sais pas pourquoi.

En voici un exemple:


Erreur


requête SQL:




CREATE
TABLE
`user`
(


`login`
TINYTEXT
NOT
NULL
,


`password`
BLOB
NOT
NULL
,


`time`
INT
UNSIGNED
NULL
,


`cookie`
TINYTEXT
NULL
,


PRIMARY
KEY
(
`login`
)


)
ENGINE
=
innodb









MySQL a répondu:



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

et j'ai quelques autres questions.

Primary key sert à autorisé qu'une seule fois la même valeur dans la collone mais à quoi sert "index" et "unique" et "texte entier"

Merci d'avance
Afficher la suite 

2 réponses

Meilleure réponse
Messages postés
2483
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
13
3
Merci
Salut,

La réponse est dans le message d'erreur :

"BLOB/TEXT column 'login' used in key specification without a key length"
Pour traduire, pas besoin d'un DEA en langues étrangères, la doc de MySQL suffit :

Erreur: 1170 SQLSTATE: 42000 (ER_BLOB_KEY_WITHOUT_LENGTH)

Message: La colonne '%s' de type BLOB est utilisée dans une définition d'index sans longueur d'index

(c'est là : http://dev.mysql.com/doc/refman/5.0/fr/error-handling.html )

Ca veut simplement dire que pour indexer un champ BLOB ou TEXT (TIBYBLOB, TINYTEXT, VARCHAR, CHAR, etc) il faut spécifier combien de caractères seront indexés (les N premiers de chaque valeur du champ).

Essaie plutôt ça :

CREATE TABLE `user` (
`login` TINYTEXT NOT NULL ,
`password` BLOB NOT NULL ,
`time` INT UNSIGNED NULL ,
`cookie` TINYTEXT NULL ,
PRIMARY KEY ( `login`(32) )
) ENGINE = innodb;

Remplace 32 par la longueur que tu veux.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 210 internautes nous ont dit merci ce mois-ci

Commenter la réponse de neigedhiver
Messages postés
12336
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
29
0
Merci
Salut

CREATETABLE`user`(
`login`TINYTEXTNOTNULL,
`password`BLOB,
`time`INTUNSIGNEDNULL,
`cookie`TINYTEXTNULL,
PRIMARYKEY(`login`)
)ENGINE=innodb

a mon avis t'as pas de valeur par defaut en NOT NULL sur un blob....

pourquoi tu mets un pass sur un champ blob et pas varchar .. ?

une recherche sur exalead vous aurait peut-etre evite de poser cette question

In a dream, I saw me, drop dead...
U were there, U cried...
It was just a dream,
if I die, U won't cry, maybe, U'll be happy
Commenter la réponse de coucou747