web-dev-qa-db-fra.com

Erreur MySQL 1264: valeur hors limites pour la colonne

Comme _ SET cust_fax dans un tableau MySQL comme celui-ci:

cust_fax integer(10) NOT NULL,

et puis j'insère une valeur comme ceci:

INSERT INTO database values ('3172978990');

mais alors il dit

`error 1264` out of value for column

Et je veux savoir où est l'erreur? Mon ensemble? Ou autre?

Toute réponse sera appréciée!

57
Cin

La valeur 3172978990 est supérieure à 2147483647 - la valeur maximale pour INT - d'où l'erreur. Les types entiers MySQL et leurs plages sont listés ici .

Notez également que le (10) dans INT(10) ne définit pas la "taille" d'un entier. Il spécifie la largeur d'affichage de la colonne. Cette information est consultative seulement.

Pour corriger l'erreur, remplacez votre type de données par VARCHAR. Les numéros de téléphone et de fax doivent être stockés sous forme de chaînes. Voir cette discussion .

82
Salman A

Vous pouvez également changer le type de données en bigInt et cela résoudra votre problème. Il est déconseillé de conserver les entiers sous forme de chaînes, à moins que cela ne soit nécessaire. :)

ALTER TABLE T_PERSON MODIFY mobile_no BIGINT;
19
Rohit Kolhekar

Vous dépassez la longueur du type de données int. Vous pouvez utiliser l'attribut UNSIGNED pour prendre en charge cette valeur.

SIGNED INT peut prendre en charge jusqu'à 2147483647 et avec NSIGNED INT autorise le double. Après cela, vous souhaitez toujours enregistrer des données, puis utilisez CHAR ou VARCHAR de longueur 10.

12
Saharsh Shah

tl; dr

Assurez-vous que votre AUTO_INCREMENT n'est pas hors de portée. Dans ce cas, définissez une nouvelle valeur avec:

ALTER TABLE table_name AUTO_INCREMENT=100 -- Change 100 to the desired number

Explication

AUTO_INCREMENT peut contenir un nombre supérieur à la valeur maximale autorisée par le type de données. Cela peut arriver si vous remplissez une table que vous avez vidée par la suite mais que le AUTO_INCREMENT reste inchangé, mais les raisons peuvent également être différentes. Dans ce cas, l'identifiant d'une nouvelle entrée serait hors de portée.

Solution

Si cela est la cause de votre problème, vous pouvez y remédier en définissant AUTO_INCREMENT sur un identificateur plus grand que l'ID de la dernière ligne. Donc, si l'id de votre dernière ligne est 100, alors:

ALTER TABLE table_name AUTO_INCREMENT=101

Si vous souhaitez vérifier la valeur actuelle de AUTO_INCREMENT, tilisez cette commande :

SELECT `AUTO_INCREMENT`
FROM  INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'DatabaseName'
AND   TABLE_NAME   = 'TableName';
3
totymedli