[mysql] ma base est bouchée !!! ;(

mxmac

Membre d’élite
Club MacG
11 Mai 2002
3 316
121
voila mon probleme j'ai un site qui marche très bien, mais il y a un petit probleme, la table qui contient les enregistrements principaux refuse d'accepter de nouveaux enregistrements !

c'est une table avec un ID ;
 idphotos  tinyint(6)   Non    auto_increment 

il bloque sur 127 enregistrements, en fait la base les contients les 127 enregistrements
mais me donne ;

Information Valeur
format dynamique
Enregistrements 126 <- la y'a un probleme !
Longueur enr. ø 225
Taille enr.  ø 267 Octets
Suivant Autoindex 127 <- la y'a un probleme aussi !

ou j'ai fait une bourde ??? help !!!! on a plein d'autres photo a mettre ssur not' site !!!!! merci
 

passetoutou

Membre junior
3 Septembre 2003
16
0
je ne suis pas un pro MySQL mais il me semble que la clé de ta table est de type tinyint soit un nombre compris par défaut entre [-128..127] d'où le blocage.
Une convertion en INT donc devrait ressoudre le problème.
 

mxmac

Membre d’élite
Club MacG
11 Mai 2002
3 316
121
je suis bien pire que toi je test !!!!! merci
 

grenoble

Membre confirmé
22 Novembre 2000
388
3
passetoutou a dit:
je ne suis pas un pro MySQL mais il me semble que la clé de ta table est de type tinyint soit un nombre compris par défaut entre [-128..127] d'où le blocage.
Une convertion en INT donc devrait ressoudre le problème.
tu as tout à fait trouvé le problème.

un tinyint peut prendre les valeurs -127 à 128 ou 0 à 255 s'il est déclaré non signé (unsigned)

le chiffre 6 n'a aucune raison d'être et peut être mal compris:
tinyint est sur 1 octet
smallint est sur 2 octets
medium sur 3
int sur 4
bigint sur 8 (!)

les valeurs que l'on met entre parenthèse, pour les entiers, ne sert qu'à indiquer combien on souhaite afficher de chiffres au maximum, ça ne concerne que l'affichage, pas la précision.
On utilise généralement cet attribut en le complétant de "zerofill" pour indiquer qu'il faut remplir de zéro l'affichage du nombre.
ainsi un int(6) valant 265 sera affiché 000265, mais il sera toujours enregistré sur 4 octets.
un tinyint est sur 1 octet, mais pour avoir "127" à l'affichage, il faut le déclarer tinyint(3)... un peu compliqué, je vous l'accorde.

pour résoudre ton problème, mxmax, il suffit d'utiliser un type d'entier plus élevé. mais, il est bon aussi de réfléchir au valeur maximale que pourrait prendre cet entier, afin d'éviter de toujours utiliser un int. bien souvent, un mediumint suffit, tout dépends du nombre d'enregistrements que va contenir ta base.
en conservant des types d'entiers adaptés, on optimise tranquillement les performances de MySQL.