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

diferencia entre null y valor vacío

Estas en el tema de diferencia entre null y valor vacío en el foro de Mysql en Foros del Web. Hola a todos, ¿Alguien me puede explicar la diferencia entre guardar un campo vacío en una tabla o guardar null? El problema viene porque en ...
  #1 (permalink)  
Antiguo 24/04/2008, 04:47
Avatar de SUSMO  
Fecha de Ingreso: abril-2008
Ubicación: Barcelona
Mensajes: 188
Antigüedad: 16 años
Puntos: 0
diferencia entre null y valor vacío

Hola a todos,

¿Alguien me puede explicar la diferencia entre guardar un campo vacío en una tabla o guardar null?

El problema viene porque en una tabla tengo campos definidos como enteros, permito que puedan ser nulos y por defecto de doy el valor NULL.
A la hora de hacer el insert de esos campos si pongo valores vacíos me crea un error:
Cita:
INSERT INTO coches VALUES('65064',432,'cotxe',20,14,52,'1.6 16V 110cv','usado',,'si',7900.00,2003,2003,,55000,'gas olina','manual','si','no','no',,,,,,,'','El coche bla bla bla.','no',1 ) You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''si',7900.00,2003,2003,,55000,'gasolina','manual' ,'si','si','no','si','no','no',' at line 1
He estado investigando y los tipos corresponden a valor vacío, es decir el primer valor que inserto vacío (despues de 'usado') se corresponde a un dato de tipo entero, en cambio si le pongo como vacío de una cadena ' ' me lo inserta bien, lo mismo pasa si en lugar de , , le pongo null

Yo tenía entendido que si haces un insert de un valor vacío te coge el de por defecto que en mi caso es null y no entiendo pq me da problemas. Puedo solucionar mi problema poniendo null en lugar de vacío pero me gustaría aclarar el concepto para no repetir el error.
He estado mirando el manual de MySQL pero aún me he liado más.

¿Alguien puede explicarmelo?

Gracias por adelantado.
  #2 (permalink)  
Antiguo 24/04/2008, 07:51
Avatar de SUSMO  
Fecha de Ingreso: abril-2008
Ubicación: Barcelona
Mensajes: 188
Antigüedad: 16 años
Puntos: 0
Re: diferencia entre null y valor vacío

Otra pregunta más, al hacer un select, cual es el valor del campo que devuelve mysql si éste está guardado en la base de datos como NULL? devuelve lo mismo que si guardara un valor vacío o en blanco?

Seria lo mismo hacer:

$row=mysql_fetch_row($query)
if ($row[campo] == '') a if ($row[campo] == NULL) ?

Se puede insertar un campo declarado numérico en blanco? sin comillas sólo un espacio en blanco.

Gracias por vuestra atención
  #3 (permalink)  
Antiguo 24/04/2008, 08:12
 
Fecha de Ingreso: febrero-2007
Mensajes: 1.292
Antigüedad: 17 años, 2 meses
Puntos: 13
Re: diferencia entre null y valor vacío

Cita:
Iniciado por SUSMO Ver Mensaje
Hola a todos,

¿Alguien me puede explicar la diferencia entre guardar un campo vacío en una tabla o guardar null?

El problema viene porque en una tabla tengo campos definidos como enteros, permito que puedan ser nulos y por defecto de doy el valor NULL.
A la hora de hacer el insert de esos campos si pongo valores vacíos me crea un error:


He estado investigando y los tipos corresponden a valor vacío, es decir el primer valor que inserto vacío (despues de 'usado') se corresponde a un dato de tipo entero, en cambio si le pongo como vacío de una cadena ' ' me lo inserta bien, lo mismo pasa si en lugar de , , le pongo null

Yo tenía entendido que si haces un insert de un valor vacío te coge el de por defecto que en mi caso es null y no entiendo pq me da problemas. Puedo solucionar mi problema poniendo null en lugar de vacío pero me gustaría aclarar el concepto para no repetir el error.
He estado mirando el manual de MySQL pero aún me he liado más.

¿Alguien puede explicarmelo?

Gracias por adelantado.
Si no haces un insert de un campo, te pilla el valor por defecto, si le dices que el valor es vacio le estas dando un "valor".
  #4 (permalink)  
Antiguo 24/04/2008, 08:14
 
Fecha de Ingreso: febrero-2007
Mensajes: 1.292
Antigüedad: 17 años, 2 meses
Puntos: 13
Re: diferencia entre null y valor vacío

Cita:
Iniciado por SUSMO Ver Mensaje
Otra pregunta más, al hacer un select, cual es el valor del campo que devuelve mysql si éste está guardado en la base de datos como NULL? devuelve lo mismo que si guardara un valor vacío o en blanco?

Seria lo mismo hacer:

$row=mysql_fetch_row($query)
if ($row[campo] == '') a if ($row[campo] == NULL) ?
No es lo mismo.

Cita:
Se puede insertar un campo declarado numérico en blanco? sin comillas sólo un espacio en blanco.

Gracias por vuestra atención
La respuesta es simple, puedes hacer un casting de un espacio en blanco a un numero? No.
  #5 (permalink)  
Antiguo 24/04/2008, 08:20
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
Re: diferencia entre null y valor vacío

Un espacio en blanco es el CHAR(32).
NULL equivale al CHAR(0) y define un objeto no asignado, mientras que ('') define un campo que se sabe sin contenido.
En esencia son distintos porque, como en programación C o VB, un objeto igual Nothing o NULL es un objeto sin asignación de memoria. Mientras que un objeto vacío es un objeto que apunta a aun área de memoria, declarandola vacía.
El sentido de inexistencia es la determinación de estados de no relación entre valores de campos de tablas, que pueden ser útiles en determinadas consultas. Dentro de la definición de una tabla, sirve, por ejemplo, para definir campos pueden omitirse sin que afecten la consistencia de datos.
Para una mejor y más amplia aclaración visita: A.5.3. Problemas con valores NULL
  #6 (permalink)  
Antiguo 24/04/2008, 09:35
Avatar de SUSMO  
Fecha de Ingreso: abril-2008
Ubicación: Barcelona
Mensajes: 188
Antigüedad: 16 años
Puntos: 0
Re: diferencia entre null y valor vacío

Muchas gracias, me habéis sido de mucha ayuda!!!
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.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:47.