Coincé a la 128eme entrée ?

2ni
Petit nouveau ! | 1 Messages

27 mars 2007, 22:51

Bonjour,
Je cherche a utiliser un script tout fait pour un moteur de recherche interne. J'ai crée la table, c'est apparement oridinaire :

DROP TABLE IF EXISTS recherche;
CREATE TABLE recherche (
id tinyint(4) NOT NULL auto_increment,
url varchar(250) NOT NULL default '',
titre varchar(250) NOT NULL default 'sans titre',
mots_cles text,
PRIMARY KEY (id)
);

Mais je ne sais pour quelle raison, lorsque j'arrive a la 128eme entrée dans la base, j'ai une erreur... en fait, je peux plus rien rentrer au dela de la 127eme entrée... Je comprends pas. Je pense que c'est du a Mysql... je suis chez Free.

Voici ce que ca me dit :
#1062 - Duplicate entry '127' for key 1

HELP !!! :wink:

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

27 mars 2007, 22:59

ton champ 'id' est de type tinyint, c'est à dire codé sur 1 octet (8 bit).

donc, 2^8 = 256 valeurs possibles. Sachant qu'un tinyint est signé, c'est à dire qu'il contient moitié de valeur positive, moitié négative, tu disposes donc des chiffres de -127 à 127
Ton auto_increment, même s'il te génère une valeur supérieure à 127 est tronquée à 127 ;)

Il te reste donc 2 solutions :
- changer le type pour un type permettant plus de valeur (http://www.destrucsaweb.com/ressources/ ... oto_71.php)
- mettre l'attribut unsigned sur ton champ 'id', ce qui te permettra d'aller jusqu'a 255, sachant que le problème se reposera
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

ViPHP
AB
ViPHP | 5818 Messages

27 mars 2007, 23:46

C'est vrai qu'un ID de type tinyint j'avais jamais vu...Heureusement que Zeus était là.

Normalement un ID est plus souvent de type int ce qui laisse beaucoup, beaucoup plus de marge :wink:
J'ai également des sites chez free et ça ne devrait te poser aucun pb de modifier ça dans phpmyadmin.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

28 mars 2007, 00:05

Bah ca peut se faire, l'idée est d'en profiter et de prendre moins de place quand on sait qu'une table ne dépassera jamais la 100 aine d'enregistrement :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...