Page 1 sur 1

Coincé a la 128eme entrée ?

Posté : 27 mars 2007, 22:51
par 2ni
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:

Posté : 27 mars 2007, 22:59
par zeus
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

Posté : 27 mars 2007, 23:46
par AB
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.

Posté : 28 mars 2007, 00:05
par Ryle
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 :)