2011-09-18 19 views
7

Za każdym razem, gdy próbuję utworzyć instrukcję wstawiania do mojej bazy danych, otrzymuję komunikat "Niepoprawna wartość dziesiętna:" NULL "dla kolumny" bounty3 "w wierszu 1". Jak wstawić wartość pustą do dziesiętnego typu danych? Czy powinienem po prostu ustawić wartość domyślną 0.00?MySQL - Decimal nie może być NULL

Incorrect decimal value: '' 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/135259578210secreason.wav', '/audio/mp3/jqmrgpfcMichael/135259578210secreason.mp3', 'Rock/Funk', 'titlee', '120', 'bass', '20.00', 'guitar', '20.00', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '') 

Próbowałem tego oświadczenia z wartości NULL też. Oto błąd:

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') 
+0

Czy możesz podać wkleić instrukcję code/mysql, która wstawia dane. –

+1

Upewnij się, że definicja tabeli dopuszcza wartości NULL dla tej kolumny. Jeśli to nie pomoże nam pokazać kod i definicję danych. – Eelke

+0

Zaktualizowałem za pomocą mojej instrukcji wstawiania. Usunąłem wartość "NULL" i teraz otrzymuję ten błąd. – user547794

Odpowiedz

5

użyć pustego, nie pustego, jeśli chcesz mieć wartość domyślną.

+0

Próbowałem tego również z wartością NULL. Zobacz aktualizację. – user547794

+0

-1 Jeśli zadeklarujesz kolumnę z wartością domyślną, wstawienie "null" uruchomi wartość domyślną, która będzie używana. OP ** nie ** zadeklarował wartość domyślną dla kolumny 'not null', dlatego wystawiony jest błąd. Wstawianie pustego '' ''** nie ** wstawi domyślnej wartości. Wstawia '0'. – Johan

+0

Nadal -1, ale najwyraźniej OP wstawia '' null'' do dziesiętnego i oczekuje, że MySQL zobaczy, że jest to 'null', a nie ciąg wypełniony n.u.l.l. – Johan

0

Należy upewnić się, że schemat bazy danych dopuszcza wartości NULL dla tej kolumny. Uruchom describe <tablename>; w kliencie MySQL, aby zobaczyć, co jest schematem dla tej tabeli.

Jeśli schemat nie zezwala na wartość null, można użyć alter table, aby zmienić schemat. Upewnij się, że dla tej kolumny nie podano wartości NOT NULL i wszystko powinno być w porządku.

11

Oh .. próbujesz wstawić pusty ciąg '' do bounty3. Zastąp go NULL. Zauważyłem także puste ciągi dla innych możliwych wartości liczbowych, np. Bonty4. Powinieneś zastąpić wszystkie puste ciągi wartościami NULL dla wartości numerycznych.

np .: mysql_query ("WSTAW DO NÓŻKI numer, WARTOŚCI (NULL, 1)");

EDIT: HEY HEY dostać punkt, nie można wstawić NULL do wartości numerycznej jako „null”, ponieważ jest to ciąg znaków, należy wstawić jako NULL bez cudzysłowów

1

Można uruchomić tę kwerendę aby zezwolić na wartości NULL w polu "bounty3".

ALTER TABLE songs ZMIANA bounty3bounty3 DECIMAL (10,0) NULL;

+0

Na tym polu zezwalam na wartość NULL. To po prostu nie działa dla dziesiętnego typu danych (które uważam, że potrzebuję do transakcji finansowych ...) – user547794

3

Właśnie poradziłem sobie z tym problemem w MySql 5.1.61. Jeśli serwer jest w trybie ścisłym, należy wprowadzić 0 zamiast "" dla pól dziesiętnych. Wyłączenie trybu ścisłego umożliwia po prostu wypełnienie wartości pustej.

0

Upewnij się, że typ pola zezwala na wartości NULL, a wartość domyślna to NULL.

Następnie użyj:

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

Działa to dla wkładek lub aktualizacji.

Próbowałem używać $date_value = NULL i próbowałem nawet unset($date_value) przed wstawieniem lub aktualizacją i nigdy nie działało na moich polach dziesiętnych. MySQL zawsze konwertował je na 0,00. Powyższa metoda była jedynym rozwiązaniem, które zadziałało dla mnie.

0

Dzięki, to zadziałało, używając NULL jeśli chodzi pusty:

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

Inną opcją jest, aby upewnić się, że w danych źródłowych, puste komórki lub pola zawierają „null” przed importować je w MySQL. W ten sposób MySQL rozpozna te pola jako naprawdę NULL i nie przekształci ich na 0.

Powiązane problemy