2011-09-18 23 views
7

Cada vez que intento hacer una instrucción de inserción en mi base de datos, aparece un error "Valor decimal incorrecto: 'NULO' para la columna 'bounty3' en la fila 1". ¿Cómo inserto un valor nulo en un tipo de datos decimal? ¿Debo hacer el valor predeterminado de 0.00?MySQL - El decimal no puede ser NULO

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', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '') 

Probé esta declaración con un valor NULL también. Aquí está el error:

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

¿Puede por favor darle pegar el código/instrucción mysql que inserta los datos. –

+1

Asegúrate de que la definición de tu tabla permita valores NULOS para esa columna. Si eso no ayuda a mostrarnos su código y su definición de datos. – Eelke

+0

He actualizado con mi declaración de inserción. Borré el valor 'NULO' y ahora recibo este error. – user547794

Respuesta

5

utilice en blanco, no nulo, si desea el valor predeterminado.

+0

Intenté esto con un valor NULL también. Ver la actualización – user547794

+0

-1 Si declara la columna con un valor predeterminado, al insertar 'null' se activará el valor predeterminado. El OP ha ** ** declarado como predeterminado en una columna 'no nulo', por lo tanto, se emite un error. Insertar el espacio en blanco '''' ** no ** inserta el valor predeterminado. Inserta '0'. – Johan

+0

Todavía -1, pero aparentemente el OP está insertando ''null'' en el decimal y esperando que MySQL lo vea' null' y no una cadena llena con n.u.l.l. – Johan

0

Debe asegurarse de que su esquema de base de datos permita valores NULOS para esa columna. Ejecute describe <tablename>; en su cliente MySQL para ver cuál es el esquema para esa tabla.

Si el esquema no permite nulo, puede usar alter table para cambiar el esquema. Asegúrese de no especificar NOT NULL para esa columna y debería estar bien.

11

Oh ... está intentando insertar una cadena vacía '' en bounty3. Reemplázalo con NULL. También he notado cadenas vacías para otros posibles valores numéricos, por ejemplo, bonty4. Debe reemplazar todas las cadenas vacías con NULL para valores numéricos.

por ejemplo: mysql_query ("INSERT INTO empty_number, number VALUES (NULL, 1)");

EDITAR: HEY HEY obtener el punto, no se puede insertar NULL en un valor numérico como 'NULO' porque esto es una cadena, se debe insertar como NULL sin comillas

1

Puede ejecutar esta consulta para permitir valores NULL en el campo 'bounty3'.

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

+0

Estoy permitiendo NULL en este campo. Simplemente no parece funcionar para un tipo de datos decimal (que creo que necesito para las transacciones financieras ...) – user547794

3

Acabo de resolver este problema en MySql 5.1.61. Si el servidor está en modo estricto, debe ingresar 0 en lugar de '' para los campos decimales. Deshabilitar el modo estricto le permite simplemente '' completar un valor nulo.

0

Asegúrese de que el tipo de campo permita valores de NULL y que el valor predeterminado sea NULL.

A continuación, utilice:

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

Esto funciona para inserciones o actualizaciones.

He intentado usar $date_value = NULL e incluso he intentado unset($date_value) antes de insertar o actualizar, y nunca funcionó en mis campos decimales. MySQL siempre los convirtió a 0.00. El método anterior fue la única solución que funcionó para mí.

0

Gracias, funcionó usando NULL cuando se trata de vacío:

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

Otra opción es asegurarse de que en los datos de origen, las celdas vacías o campos contienen 'NULL' antes de importarlos en MySQL. De esta forma, MySQL reconocerá estos campos como realmente NULL, y no los transformará en 0.

Cuestiones relacionadas