11
votes

Mysql - décimal ne peut pas être nul

Chaque fois que j'essaie de faire une instruction insertion dans ma Dastabase, je reçois une "valeur décimale incorrecte:" null "pour la colonne" Bounty3 "à la ligne 1". Comment insérer une valeur nulle dans un type de données décimal? Devrais-je simplement faire la valeur par défaut 0.00?

Incorrect decimal value: 'NULL' for column 'bounty3' at row 1 Whole query: INSERT INTO songs (userid, wavURL, mp3URL, genre, songTitle, BPM, insWanted, bounty, insWanted2, bounty2, insWanted3, bounty3, insWanted4, bounty4, insWanted5, bounty5, insWanted6, bounty6, insWanted7, bounty7, insWanted8, bounty8, insWanted9, bounty9, insWanted10, bounty10) VALUES ('12534545', '/audio/wav/jqmrgpfcMichael/143922765110secreason.wav', '/audio/mp3/jqmrgpfcMichael/143922765110secreason.mp3', 'Rock/Funk', 'title', '110', 'bass', '110.00', 'guitar', '20.00', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL')


4 commentaires

Pouvez-vous s'il vous plaît ne pas coller l'instruction Code / MySQL qui insère les données.


Assurez-vous que votre définition de table permet des valeurs nulles pour cette colonne. Si cela ne vous aide pas à nous montrer votre code et votre définition de données.


J'ai mis à jour avec mon instruction insertion. J'ai effacé la valeur «null» et je reçois maintenant cette erreur.


Voir les modifications de ma réponse - Peut-être que cela aiderait.


11 Réponses :


7
votes

Utilisez vide, pas null, si vous souhaitez la valeur par défaut.


2 commentaires

-1 Si vous déclarez la colonne avec une valeur par défaut, insertionner null déclenchera la valeur par défaut à utiliser. L'OP a pas a déclaré une valeur par défaut sur un Not NULL une erreur est émis une erreur. Insertion de blanc '' ' n'est pas Insérer la valeur par défaut. Il insère 0 .


Toujours -1, mais apparemment, l'OP insère 'null' dans la décimale et s'attendant à ce que MySQL le voie est null et non une chaîne remplie de n.u.l.l.



0
votes

Vous devez vous assurer que votre schéma de base de données permet des valeurs null pour cette colonne. Exécutez Décrivez ; dans votre client MySQL pour voir quel est le schéma de cette table.

Si le schéma ne permet pas null, vous pouvez utiliser alter Table pour changer le schéma. Assurez-vous de ne pas spécifier pas null pour cette colonne et que vous devriez être bien.


0 commentaires

15
votes

OH .. Vous essayez d'insérer une chaîne vide '' dans Bounty3. Remplacez-le par null. J'ai également remarqué des chaînes vides pour d'autres valeurs numériques possibles, par exemple BONTY4. Vous devez remplacer toutes les chaînes vides avec NULL pour les valeurs numériques.

par exemple: mysql_query ("insérer dans vide_number, valeurs de numéro (null, 1)");

EDIT : Hey Hey Obtenez le point, vous ne pouvez pas insérer NULL à une valeur numérique comme "null" car il s'agit d'une chaîne, vous devez insérer comme null sans guillemets


0 commentaires

1
votes

Vous pouvez exécuter cette requête pour permettre aux valeurs null dans le champ "Bounty3".

alter Table chansons Changer Bounty3 Bounty3 Décimal (10,0) NULL;


1 commentaires

Je permet de null sur ce champ. Il ne semble tout simplement pas fonctionner pour un type de données décimal (ce que je crois avoir besoin de transactions financières ...)



3
votes

Je viens de traiter cette question dans MySQL 5.1.61. Si le serveur est en mode strict, vous devez entrer 0 au lieu de '' pour les champs décimaux. La désactivation du mode strict vous permet de simplement faire »pour renseigner une valeur null.


0 commentaires

1
votes

Assurez-vous que le type de champ permet aux valeurs null code> et que la valeur par défaut est null code>.

Utilisez: p>

UPDATE table_name SET date_field=IF('$date_value'='',NULL,'$date_value')


0 commentaires

2
votes

Merci, cela a fonctionné à l'aide de NULL quand il est vide:

$conn->bindParam(':'.$valor, ( $key[0] ? $key[0] : NULL ), PDO::PARAM_STR);


0 commentaires

0
votes

Une autre option consiste à vous assurer que dans vos données source, les cellules vides ou les champs contiennent «NULL» avant de les importer dans MySQL. De cette façon, MySQL reconnaîtra ces champs comme étant vraiment null, et ne les transformera pas sur 0.


0 commentaires

1
votes
  1. Assurez-vous que le champ est "nullable" (n'a pas pas null dans sa définition)
  2. Valeur par défaut du champ NULL.

    ex .: prix décimal (12,2) NULL par défaut

  3. Maintenant, pour le tester, stocker un certain nombre, puis '' (une chaîne vide) dans ce champ - il devrait devenir null à la fin.

0 commentaires

1
votes

Le champ est probablement numérique. Si le champ est numérique, seuls les numéros sont acceptés. La chaîne vide n'est pas acceptée xxx

ni la chaîne nulle xxx

('null' qui est juste une corde, rien à voir avec le Valeur nulle réelle, alors "NULL" SI similaire à «Biel Bee» si vous voulez).

Donc, si la colonne est numérique, elle ne prendra que des chiffres. Toutefois, si la colonne est nullable, elle acceptera également NULL. Cela signifie que votre insert doit avoir xxx

si vous appuyez sur NULL sur une telle colonne et la colonne a une valeur par défaut, la valeur par défaut sera utilisée à la place de la null que vous poussez.


0 commentaires

0
votes

Cela a fonctionné por moi lorsque des données postales sont reçues: ... Si ($ valeur == '') {$ valeur = '0.0';} ...


0 commentaires