Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Problema: diferencia entre 0 y campo vacío

Estas en el tema de Problema: diferencia entre 0 y campo vacío en el foro de Mysql en Foros del Web. Hola amigos: Tengo un campo int (ALLOW NULL) en una de las tablas de una de mis bases de datos y tengo un problema con ...
  #1 (permalink)  
Antiguo 14/09/2009, 04:21
Avatar de hvpareja  
Fecha de Ingreso: marzo-2007
Ubicación: En Vélez Málaga (Málaga)
Mensajes: 213
Antigüedad: 17 años, 1 mes
Puntos: 4
Problema: diferencia entre 0 y campo vacío

Hola amigos:

Tengo un campo int (ALLOW NULL) en una de las tablas de una de mis bases de datos y tengo un problema con lo siguiente:

Cuando el usuario introduce datos introduce el carácter "-" si quiere que la fila se cree pero el campo esté vacío; en este caso, quiero introducir un "NULL" en dicho campo, pero se me torna a cero. El problema es que no es lo mismo un campo vacío que un campo con valor cero y mysql parece que eso no lo entiende.

Contadme, ¿se me está escapando alguna solución sencilla? ¿Qué opinais que puedo hacer?
__________________
El mejor maestro es el eterno aprendiz.
http://hvpareja.wordpress.com/
  #2 (permalink)  
Antiguo 14/09/2009, 04:56
 
Fecha de Ingreso: septiembre-2003
Mensajes: 65
Antigüedad: 20 años, 7 meses
Puntos: 1
Respuesta: Problema: diferencia entre 0 y campo vacío

Un campo INT solo aceptara numeros, no caracteres, para eso necesitas un VARCHAR, que meta lo que meta lo cogera como caracter
  #3 (permalink)  
Antiguo 14/09/2009, 05:00
Avatar de hvpareja  
Fecha de Ingreso: marzo-2007
Ubicación: En Vélez Málaga (Málaga)
Mensajes: 213
Antigüedad: 17 años, 1 mes
Puntos: 4
Respuesta: Problema: diferencia entre 0 y campo vacío

Amigo, eso lo sé muy bien.

Pensé que lo entenderías cuando escribo: "en este caso quiero introducir un NULL". Me explico mejor: El usuario mete el string "-" y yo lo proceso a NULL y entonces lo meto en la base de datos.

El problema está aquí: si meto NULL, mysql lo entienede como 0. Y LO QUE QUIERO ES UN CAMPO VACÍO.
__________________
El mejor maestro es el eterno aprendiz.
http://hvpareja.wordpress.com/
  #4 (permalink)  
Antiguo 14/09/2009, 05:14
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Problema: diferencia entre 0 y campo vacío

Fijate en el CREATE TABLE de esa tabla, es posible que se haya defindo un DEFAULT en ese campo.
Si no es así, el campo no debe ser enviado, con lo que deberás crear dinámicamente la sentencia de inserción, o bien poner NULL donde va ese valor. Ahora bien, la validación del contenido de la variable lo deberás hacer en la aplicación .NO en la base de datos.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 14/09/2009, 05:18
Avatar de hvpareja  
Fecha de Ingreso: marzo-2007
Ubicación: En Vélez Málaga (Málaga)
Mensajes: 213
Antigüedad: 17 años, 1 mes
Puntos: 4
Respuesta: Problema: diferencia entre 0 y campo vacío

Correcto, y es justo lo que hago:

Valido el formulario en PHP:

1. Si es "-" lo cambio a NULL.
2. Si no es un número devuelve error.
3. Si está vacío devuelve error.

Ahora: En la inserción meto todos las filas y en la fila cuyo campo fue "-" lo METO VACÍO y efectivamente, tengo DEFAULT NULL en la base de datos. Pero no se me queda null, sino en cero.
__________________
El mejor maestro es el eterno aprendiz.
http://hvpareja.wordpress.com/
  #6 (permalink)  
Antiguo 14/09/2009, 05:22
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Problema: diferencia entre 0 y campo vacío

Postea una sentencia de INSERT terminada (una que contenga los valores reales, no variables, que estés intentando ingresar.
Postea también el CREATE. Sería útil verlo.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 14/09/2009, 05:30
Avatar de hvpareja  
Fecha de Ingreso: marzo-2007
Ubicación: En Vélez Málaga (Málaga)
Mensajes: 213
Antigüedad: 17 años, 1 mes
Puntos: 4
Respuesta: Problema: diferencia entre 0 y campo vacío

Código PHP:
$query "insert into tabla(cid,
                                                                  eid,
                                                                  gid,
                                                                  fid,
                                                                  ano,
                                                                  mes,
                                                                  dia,
                                                                  conc,
                                                                  fecha_intro,
                                                                  uid) 
                                                           values('1',
                                                                  '1',
                                                                  '1',
                                                                  '1',
                                                                  '1990',
                                                                  '4',
                                                                  '20',
                                                                  '1456',
                                                                  NOW(),
                                                                  '3')"

El valor conc es el que quiero diferenciar entre 0 y (Null).

El Create Table:

Cita:
CREATE TABLE `tabla` (
`coid` int(11) NOT NULL auto_increment,
`cid` int(11) NOT NULL,
`eid` int(11) NOT NULL COMMENT 'Especie',
`gid` int(11) NOT NULL COMMENT 'Genero',
`fid` int(11) NOT NULL COMMENT 'Familia',
`ano` int(4) NOT NULL,
`mes` int(2) NOT NULL,
`dia` int(2) NOT NULL,
`conc` int(11) default NULL COMMENT 'Si es nulo es que no hay datos para ese dia',
`fecha_intro` datetime NOT NULL,
`uid` int(11) NOT NULL,
PRIMARY KEY (`coid`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci;
__________________
El mejor maestro es el eterno aprendiz.
http://hvpareja.wordpress.com/
  #8 (permalink)  
Antiguo 14/09/2009, 05:32
 
Fecha de Ingreso: septiembre-2003
Mensajes: 65
Antigüedad: 20 años, 7 meses
Puntos: 1
Respuesta: Problema: diferencia entre 0 y campo vacío

Te entendi, un campo INT nunca te va a mostrar NULL que yo sepa, siempre 0.
  #9 (permalink)  
Antiguo 14/09/2009, 05:36
Avatar de hvpareja  
Fecha de Ingreso: marzo-2007
Ubicación: En Vélez Málaga (Málaga)
Mensajes: 213
Antigüedad: 17 años, 1 mes
Puntos: 4
Respuesta: Problema: diferencia entre 0 y campo vacío

Gracias Gurthgor... Pero yo voy a trabajar con esos datos, voy a hacer cálculos etc... ¿ves bien ponerlo como VARCHAR? Es que no me parece "limpio".

De todos modos creo que sí el campo sí admite NULL, pero claro, eso lo consigo cuando lo introduzco manualmente en la base de datos (con Navicat) y lo dejo vacío, cuando viene de PHP lo deja como cero.
__________________
El mejor maestro es el eterno aprendiz.
http://hvpareja.wordpress.com/
  #10 (permalink)  
Antiguo 14/09/2009, 05:45
Avatar de hvpareja  
Fecha de Ingreso: marzo-2007
Ubicación: En Vélez Málaga (Málaga)
Mensajes: 213
Antigüedad: 17 años, 1 mes
Puntos: 4
Respuesta: Problema: diferencia entre 0 y campo vacío

Esta es una imagen sacada de mi tabla en mi gestor MySQL



¡Hay diferencia entre (Null) y 0! El problema está al ingresarlo desde PHP.
__________________
El mejor maestro es el eterno aprendiz.
http://hvpareja.wordpress.com/
  #11 (permalink)  
Antiguo 14/09/2009, 05:47
 
Fecha de Ingreso: septiembre-2003
Mensajes: 65
Antigüedad: 20 años, 7 meses
Puntos: 1
Respuesta: Problema: diferencia entre 0 y campo vacío

Es logico, un INT es numerico, para mysql el valor nulo es el 0. Yo desde php o phpmyadmin si lo dejo vacio en un campo numerico me lo pone a 0. No se que problema tienes con que este a 0 en vez de null pero en php solo necesitas usar el is_numeric en php o $valor>0 y ya esta
  #12 (permalink)  
Antiguo 14/09/2009, 05:52
Avatar de hvpareja  
Fecha de Ingreso: marzo-2007
Ubicación: En Vélez Málaga (Málaga)
Mensajes: 213
Antigüedad: 17 años, 1 mes
Puntos: 4
Respuesta: Problema: diferencia entre 0 y campo vacío

No sabes qué problema tengo en que esté 0 en vez de null... Pues es sencillo. Trabajo con datos biológicos (soy biólogo) y no es lo mismo que mi muestra tenga cero resultados a que no haya conseguido los resultados aunque los hubiera. No es lo mismo que la media se me disperse por meter ceros a que no sean considerados. No es lo mismo dibujar una gráfica que caiga a cero o que se corte en ciertos intervalos....

El 'is_numeric()' lo uso para ver si es un número... con eso no tengo problema.

Gracias por tu ayuda tio, sigo por aquí...
__________________
El mejor maestro es el eterno aprendiz.
http://hvpareja.wordpress.com/

Última edición por hvpareja; 14/09/2009 a las 06:01 Razón: Sobraba texto
  #13 (permalink)  
Antiguo 14/09/2009, 05:58
Avatar de hvpareja  
Fecha de Ingreso: marzo-2007
Ubicación: En Vélez Málaga (Málaga)
Mensajes: 213
Antigüedad: 17 años, 1 mes
Puntos: 4
Respuesta: Problema: diferencia entre 0 y campo vacío

Mira!!

He conseguido hacerlo amigo!!

En el query que he posteado: simplemente no llamo al campo conc si la variable viene como "-". Lo mete como (Null).

Ahora me surge otro problemilla, pero no es de MySQL.

Gracias por ayudarme!!
__________________
El mejor maestro es el eterno aprendiz.
http://hvpareja.wordpress.com/
  #14 (permalink)  
Antiguo 14/09/2009, 06:04
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Problema: diferencia entre 0 y campo vacío

Cita:
Es logico, un INT es numerico, para mysql el valor nulo es el 0.
No es así. Una columna numérica puede ser NULL, pero eso no equivale a cero. NULL es un valor que define inexistencia. Cero es un valor real.
El problema se puede estar produciendo en el paso desde PHP a MySQL.
Ahora bien, cuando intentas ingresar el campo como NULL, ¿entra así en el string?:
Código sql:
Ver original
  1. INSERT INTO tabla(cid, eid, gid, fid, ano, mes, dia, conc, fecha_intro, uid)
  2. VALUES('1', '1', '1', '1', '1990', '4', '20', 'NULL', NOW(), '3')

o así:
Código sql:
Ver original
  1. INSERT INTO tabla(cid, eid, gid, fid, ano, mes, dia, conc, fecha_intro, uid)
  2. VALUES('1', '1', '1', '1', '1990', '4', '20', NULL, NOW(), '3')

En la primera estás poniendo un string que contiene "NULL"; en la segunda estás poniendo el valor NULL. Son diferentes.

Nota: Si estás ingresando valores numéricos, no los pongas entre apóstrofes. No los necesitan.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #15 (permalink)  
Antiguo 14/09/2009, 06:05
 
Fecha de Ingreso: septiembre-2003
Mensajes: 65
Antigüedad: 20 años, 7 meses
Puntos: 1
Respuesta: Problema: diferencia entre 0 y campo vacío

De biologia sabras, pero de mysql ni idea. Numerico, es decir, numeros, null no es un numero, 0 si, intentar meter null en vez de 0 es absurdo. Si no quieres los resultados con 0 filtras la consulta para que no aparezcan. Y si, estoy certificado como ingeniero de microsoft.
  #16 (permalink)  
Antiguo 14/09/2009, 06:07
Avatar de hvpareja  
Fecha de Ingreso: marzo-2007
Ubicación: En Vélez Málaga (Málaga)
Mensajes: 213
Antigüedad: 17 años, 1 mes
Puntos: 4
Respuesta: Problema: diferencia entre 0 y campo vacío

Bueno, en realidad no entra de ninguna de las dos maneras... Entran todos como $variable.

Con respecto al NULL he probado de las dos maneras y en ambos casos me daba un 0.
__________________
El mejor maestro es el eterno aprendiz.
http://hvpareja.wordpress.com/
  #17 (permalink)  
Antiguo 14/09/2009, 06:10
Avatar de hvpareja  
Fecha de Ingreso: marzo-2007
Ubicación: En Vélez Málaga (Málaga)
Mensajes: 213
Antigüedad: 17 años, 1 mes
Puntos: 4
Respuesta: Problema: diferencia entre 0 y campo vacío

Cita:
Iniciado por gurthgor Ver Mensaje
De biología sabrás, pero de mysql ni idea. Numérico, es decir, números, null no es un número, 0 sí, intentar meter null en vez de 0 es absurdo. Si no quieres los resultados con 0 filtras la consulta para que no aparezcan. Y sí, estoy certificado como ingeniero de Microsoft.
De ambas cosas estoy aprendiendo, afortunadamente. Y te compadezco por pensar que lo sabes todo sobre algo.

Intentar meter Null en vez de cero ES LO CORRECTO SI NO HAY DATOS. Meter cero indistintamente es lo absurdo.

Si encuentro una cesta con 0 manzanas es una cesta vacía. Si encuentro una cesta dentro de la cual no puedo mirar.... ¿hay 0 manzanas?
__________________
El mejor maestro es el eterno aprendiz.
http://hvpareja.wordpress.com/

Última edición por hvpareja; 14/09/2009 a las 06:18 Razón: 8 faltas de ortografía en la cita
  #18 (permalink)  
Antiguo 14/09/2009, 06:20
 
Fecha de Ingreso: septiembre-2003
Mensajes: 65
Antigüedad: 20 años, 7 meses
Puntos: 1
Respuesta: Problema: diferencia entre 0 y campo vacío

Estas metiendo un tipo INT, ¿ves que el NULL este en el rango de valores permitido?, ¿acaso el phpmyadmin te pone a null? pero si lo hace con varchar

Tipo Bytes Valor Mínimo Valor Máximo
(Con signo/Sin signo) (Con signo/Sin signo)
INT 4 -2147483648 2147483647

Si no hay cesta de manzanas es que no la has creado, no hay registro, si la hay y no hay manzanas es que hay 0 manzanas
  #19 (permalink)  
Antiguo 14/09/2009, 06:24
Avatar de hvpareja  
Fecha de Ingreso: marzo-2007
Ubicación: En Vélez Málaga (Málaga)
Mensajes: 213
Antigüedad: 17 años, 1 mes
Puntos: 4
Respuesta: Problema: diferencia entre 0 y campo vacío

Gurthgor, varias cosas:

Primero: phpmyadmin no lo uso, uso Navicat.
Segundo: MySQL pone el dato a Null si ha creado la fila y no hay dato para el campo en cuestión.

Tercero: Creo la fila porque he encontrado "la cesta", SÍ HAY CESTA PERO NO PUEDO VER LO QUE CONTIENE, presuponer que hay cero manzanas es un error que puede echar abajo la publicación del trabajo. Como científico, debo explicar todo mi experimento, tenga los datos o no.
__________________
El mejor maestro es el eterno aprendiz.
http://hvpareja.wordpress.com/
  #20 (permalink)  
Antiguo 14/09/2009, 06:26
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Problema: diferencia entre 0 y campo vacío

Cita:
Si encuentro una cesta con 0 manzanas es una cesta vacía. Si encuentro una cesta dentro de la cual no puedo mirar.... ¿hay 0 manzanas?
Magnífico ejemplo.
Un valor NULL es parecido a un agujero negro: Cualquier cosa que hagas con el te dará NULL de todas formas.

Para aclarar el panorama, gurthgor, citemos el manual de MySQL:
Cita:
A.5.3. Problemas con valores NULL

El concepto del valor NULL es una fuente común de confusión para los recién llegados a SQL, que frecuentemente piensan que NULL es lo mismo que una cadena de caracteres vacía ''. Esto no es así. Por ejemplo, las siguientes sentencias son completamente diferentes:

mysql> INSERT INTO my_table (phone) VALUES (NULL);
mysql> INSERT INTO my_table (phone) VALUES ('');

Ambas sentencias insertan un valor en la columna phone, pero la primera inserta un valor NULL y la segunda una cadena vacía. El significado de la primera se puede traducir por “el número de teléfono no es conocido”, y el significado de la segunda es “se sabe que la persona no tiene teléfono, y por tanto, no hay número de teléfono.”
Hvpareja: Insisto en preguntarte lo de mi último post.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #21 (permalink)  
Antiguo 14/09/2009, 06:30
Avatar de hvpareja  
Fecha de Ingreso: marzo-2007
Ubicación: En Vélez Málaga (Málaga)
Mensajes: 213
Antigüedad: 17 años, 1 mes
Puntos: 4
Respuesta: Problema: diferencia entre 0 y campo vacío

Cita:
Magnífico ejemplo.
Gracias.

Cita:
Hvpareja: Insisto en preguntarte lo de mi último post.
Cuando pongo NULL funciona correctamente. Efectivamente, mete Null en la base de datos, en el campo INT, en lugar de 0. Justo lo que quería.

Muchísimas gracias a los dos.
__________________
El mejor maestro es el eterno aprendiz.
http://hvpareja.wordpress.com/
  #22 (permalink)  
Antiguo 14/09/2009, 06:31
 
Fecha de Ingreso: septiembre-2003
Mensajes: 65
Antigüedad: 20 años, 7 meses
Puntos: 1
Respuesta: Problema: diferencia entre 0 y campo vacío

Tu mismo lo dices en el texto : "cadena de caracteres vacía", una cadena, un string, no un tipo INT.

Repito, en mysql un int, SOLO admite este rango de VALORES

INT 4 -2147483648 2147483647

Tu programa puede mostrarte null o lo que sea, pero eso es un 0
  #23 (permalink)  
Antiguo 14/09/2009, 06:58
 
Fecha de Ingreso: septiembre-2003
Mensajes: 65
Antigüedad: 20 años, 7 meses
Puntos: 1
Respuesta: Problema: diferencia entre 0 y campo vacío

Lo he comprobado y teneis razon, hay una diferencia, por ejemplo con el COUNT(campo) no muestra los nulos y si los ceros.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 14:08.