120 votes

Erreur MySQL 1264 : valeur hors limites pour la colonne

Comme je SET cust_fax dans une table en MySQL comme ceci :

cust_fax integer(10) NOT NULL,

et ensuite j'insère la valeur comme ceci :

INSERT INTO database values ('3172978990');

mais alors il dit

Erreur 1264 : la colonne n'a pas de valeur.

Et je veux savoir où se trouve l'erreur ? Mon poste ? Ou autre ?

Toute réponse sera appréciée !

205voto

Salman A Points 60620

La valeur 3172978990 est plus grande que 2147483647 - la valeur maximale pour INT - d'où l'erreur. Les types d'entiers MySQL et leurs plages sont énumérés ici .

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

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

48voto

Rohit Kolhekar Points 381

Vous pouvez également changer le type de données en bigInt et cela résoudra votre problème, ce n'est pas une bonne pratique de garder les entiers en tant que chaînes de caractères, sauf si cela est nécessaire :)

ALTER TABLE T_PERSON MODIFY mobile_no BIGINT;

14voto

Saharsh Shah Points 11307

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

INT SIGNÉ peut supporter jusqu'à 2147483647 et avec INT NON AFFECTÉ permet le double que cela. Après cela, vous voulez toujours sauvegarder les données plutôt que d'utiliser la fonction CHAR o VARCHAR avec une longueur de 10

11voto

totymedli Points 4228

En résumé

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 se produire si vous avez rempli une table que vous avez vidée par la suite, mais que l'élément AUTO_INCREMENT sont restés les mêmes, mais il peut y avoir d'autres raisons. Dans ce cas, l'identifiant d'une nouvelle entrée serait hors de portée.

Solution

Si c'est la cause de votre problème, vous pouvez le résoudre en définissant les paramètres suivants AUTO_INCREMENT à une valeur supérieure à celle de l'identifiant de la dernière ligne. Ainsi, si l'identifiant de la dernière ligne est 100, alors.. :

ALTER TABLE table_name AUTO_INCREMENT=101

Si vous souhaitez vérifier AUTO_INCREMENT La valeur actuelle de l'entreprise, utiliser cette commande :

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

3voto

Travailler avec :

ALTER TABLE `table` CHANGE `cust_fax` `cust_fax` VARCHAR(60) NULL DEFAULT NULL;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X