Retroceder   Foros del Web > Programación para sitios web > Bases de Datos

Respuesta
 
Herramientas Desplegado
Antiguo 05-oct-2006, 13:38   #1 (permalink)
bellacord está en el buen camino
 
Fecha de Ingreso: junio-2003
Ubicación: Frente al monitor
Mensajes: 502
Enviar un mensaje por AIM a bellacord Enviar un mensaje por MSN a bellacord Enviar un mensaje por Skype™ a bellacord
null vs vacio

alguien me explica la diferencia entre un campo null y un vacio... o me pasan un link con info?
__________________
Tengo una duda...
bellacord está desconectado   Responder Citando
Antiguo 05-oct-2006, 13:49   #2 (permalink)
enerone1 ha deshabilitado el karma
 
Fecha de Ingreso: octubre-2006
Mensajes: 23
Cuando definis un campo como null tenes la posibilidad de utilizar funciones como, IS NULL o IS NOT NULL, que te van a dar siempre un booleano como resultado. Esto es mas reapido que un select en el que preguntas por el contenido y despues lo analizas

Suerte
Enermedia
enerone1 está desconectado   Responder Citando
Antiguo 05-oct-2006, 13:51   #3 (permalink)
bellacord está en el buen camino
 
Fecha de Ingreso: junio-2003
Ubicación: Frente al monitor
Mensajes: 502
Enviar un mensaje por AIM a bellacord Enviar un mensaje por MSN a bellacord Enviar un mensaje por Skype™ a bellacord
si, pero cual es la diferencia en tenerlo vacio?
__________________
Tengo una duda...
bellacord está desconectado   Responder Citando
Antiguo 06-oct-2006, 07:21   #4 (permalink)
MACGREGOR está en el buen camino
 
Avatar de MACGREGOR
 
Fecha de Ingreso: enero-2005
Mensajes: 89
Hola.
Si insertas en un campo de una tabla 'NULL' insertas un string de 4 letras.
Si insertas '' insertas el valor NULL.
Si en una tabla de 5 campos insertas 4 valores y el último lo ignoras por completo insertas en realidad NULL.

Vacío es igual a NULL. Un campo en una tabla tiene un valor de un cierto tipo (numérico, carácter...) o tiene NULL que és la ausencia de valor.

Otra cosa es el resultado de una consulta. Si no hay resultado no devuelve nada, pero nada de nada para que no se confunda con un resultado NULL.

Por ejemplo, supongamos que tienes una tabla de usuarios con su teléfono.
Si haces una consulta sobre el teléfono del usuario "José luis" y el resultado es NULL significa que no existe el télefono de ese usuario.
Sin envargo, si no existe el usuario la consulta te devolverá LA NADA.

Dependiendo del cliente que utilices para conectar con tu Base de Datos es muy posible que en algún sitio te ponga la cantidad de registros obtenidos.
En un caso te enseña los resultados vacíos y te dice "0 rows selected" (NADA DE NADA) y en otro te enseña los resultados vacíos pero te dice "1 row selected" (o Selected 1 of 1... vamos que te muestra un campo NULO=NULL)

Espero haber aclarado tu duda.
MACGREGOR está desconectado   Responder Citando
Antiguo 06-oct-2006, 14:44   #5 (permalink)
Moderador
Mithrandir llegará a ser famoso muy prontoMithrandir llegará a ser famoso muy pronto
 
Avatar de Mithrandir
 
Fecha de Ingreso: abril-2003
Mensajes: 12.108
Macgregor, me temo que estás en un error. '' (cadena vacía) es diferente de NULL.

Precisamente ahí está el asunto. NULL siginifica que el campo no tiene valor (no está definido, ausencia total).

'' indica que hay una cadena vacía, pero cadena al fin. O sea, existe algo: una cadena.

Mismo caso con el 0. "Cero unidades" es diferente de "ausencia de valor"

De esto se deriva que no puedas usar condiciones (where) preguntando si "campo = null", sino que existe la sentencia especial "campo is null"
__________________
"El hombre, en su orgullo, creó a Dios a su imagen y semejanza."
Friedrich Nietzsche
Mithrandir está desconectado   Responder Citando
Antiguo 06-oct-2006, 15:01   #6 (permalink)
(Desactivado)
Developer9 Developer9
 
Avatar de Developer9
 
Fecha de Ingreso: abril-2005
Ubicación: Mi Ecuador del alma
Mensajes: 4.202
Enviar un mensaje por MSN a Developer9
NULL es nada... es como los astronautas en el espacio
Developer9 está desconectado   Responder Citando
Antiguo 06-oct-2006, 17:51   #7 (permalink)
foo
foo ha deshabilitado el karma
 
Fecha de Ingreso: febrero-2006
Mensajes: 278
Cita:
Iniciado por Mithrandir Ver Mensaje
Macgregor, me temo que estás en un error. '' (cadena vacía) es diferente de NULL.
talvez lo dice porque oracle considera las cadenas vacias como nulas
foo está desconectado   Responder Citando
Antiguo 07-oct-2006, 09:38   #8 (permalink)
(Desactivado)
Developer9 Developer9
 
Avatar de Developer9
 
Fecha de Ingreso: abril-2005
Ubicación: Mi Ecuador del alma
Mensajes: 4.202
Enviar un mensaje por MSN a Developer9
Cierto... en SQL Server no es lo mismo por ejemplo en los campos de un INSERT INTO meterle un NULL a dos comillas simples seguidas --> ''
Developer9 está desconectado   Responder Citando
Antiguo 09-oct-2006, 07:44   #9 (permalink)
bellacord está en el buen camino
 
Fecha de Ingreso: junio-2003
Ubicación: Frente al monitor
Mensajes: 502
Enviar un mensaje por AIM a bellacord Enviar un mensaje por MSN a bellacord Enviar un mensaje por Skype™ a bellacord
ok si el null es q no se inserta valores algunos, tal como dijeron en el ejemplo de cero, que seria null, y q seria el caso entonces de "vacio"
__________________
Tengo una duda...
bellacord está desconectado   Responder Citando
Antiguo 09-oct-2006, 08:04   #10 (permalink)
PequeñoMauro está en el buen camino
 
Avatar de PequeñoMauro
 
Fecha de Ingreso: abril-2006
Ubicación: Lima - Perú
Mensajes: 599
Enviar un mensaje por MSN a PequeñoMauro
Cita:
Iniciado por foo
talvez lo dice porque oracle considera las cadenas vacias como nulas
Bueno, Oracle no considera las cadenas vacías como nulas, ya lo viví, jejeje.
bellacord, sería bueno que leas nuevamente el post de Mithrandir, ahi te explica la diferencia.
Saludos
__________________
"Nada en mis manos traigo tan solo a tu cruz me aferro....."
PequeñoMauro está desconectado   Responder Citando
Antiguo 10-oct-2006, 04:30   #11 (permalink)
MACGREGOR está en el buen camino
 
Avatar de MACGREGOR
 
Fecha de Ingreso: enero-2005
Mensajes: 89
De acuerdo

Mithrandir
Macgregor, me temo que estás en un error. '' (cadena vacía) es diferente de NULL.
foo
talvez lo dice porque oracle considera las cadenas vacias como nulas
PequeñoMauro
Bueno, Oracle no considera las cadenas vacías como nulas, ya lo viví, jejeje.

Efectivamente acostumbro a trabajar con Oracle.
He provado las siguientes instrucciones para ver si dejamos claro algo.

Los 4 primeros campos de la tabla de usuarios están declarados como NOT NULL.
T.ID_USER, T.LEADER y T.BANED son campos númericos, el resto varchar2 (strings o cadenas, como prefieran llamarlo)

insert into MICRO.TBL_USER T (T.ID_USER, T.USERNAME, T.NAME, T.PASSWORD, T.LEADER, T.BANED)
values ( 500,'',' ',' ','',NULL)


Intentando insertar en el segundo campo de la tabla (T.USERNAME, un campo NOT NULL) una cadena vacía ''.
Resultado: ORA-01400:no se puede realizar una inserción NULL en ("MICRO"."TBL_USER"."USERNAME")
Se quejó insertando la cadena '' vacía y el error habla de NULL!!

modificamos de la sentencia sql la parte del values por :values ( 500,'500',' ',' ','',NULL)
De esta manera intentamos insertar en el campo T.LEADER (numérico) una cadena vacía ''.
Resultado: 1 row inserted

No dió error, por tanto no hubo incompatibilidad de tipos, ¿se insertó una cadena vacía en un campo numérico? ¿ o se insertó NULL????

Comprovamos el contenido con la siguiente consulta:
Select T.ID_USER
From MICRO.TBL_USER T
where t.LEADER is null


Resultado: ID_USER = 500

Por tanto (en ORACLE) creo que queda claro que NULL (sin comillas) es ausencia de valor, 'NULL' una cadena de 4 carácteres, y '' (la cadena vacía) también es ausencia de valor.

No sabía que otros sistemas gestores se comportaban de forma un tanto diferente, ahunque tampoco me sorprende que grupos distintos de personas implementen ligeras variaciones en distintos SGBD's.

PequeñoMauro creo que pensabas en otro SGBD cuando mandaste tu mensaje.

Última edición por MACGREGOR; 10-oct-2006 a las 04:36.
MACGREGOR está desconectado   Responder Citando
Antiguo 10-oct-2006, 07:03   #12 (permalink)
foo
foo ha deshabilitado el karma
 
Fecha de Ingreso: febrero-2006
Mensajes: 278
Cita:
Iniciado por MACGREGOR Ver Mensaje
No sabía que otros sistemas gestores se comportaban de forma un tanto diferente, ahunque tampoco me sorprende que grupos distintos de personas implementen ligeras variaciones en distintos SGBD's.
me parece, que el estandar sql no define que una cadena vacia equivalga a null.
foo está desconectado   Responder Citando
Antiguo 10-oct-2006, 15:21   #13 (permalink)
PequeñoMauro está en el buen camino
 
Avatar de PequeñoMauro
 
Fecha de Ingreso: abril-2006
Ubicación: Lima - Perú
Mensajes: 599
Enviar un mensaje por MSN a PequeñoMauro
Cita:
Iniciado por MACGREGOR
Por tanto (en ORACLE) creo que queda claro que NULL (sin comillas) es ausencia de valor, 'NULL' una cadena de 4 carácteres, y '' (la cadena vacía) también es ausencia de valor.

No sabía que otros sistemas gestores se comportaban de forma un tanto diferente, ahunque tampoco me sorprende que grupos distintos de personas implementen ligeras variaciones en distintos SGBD's.

PequeñoMauro creo que pensabas en otro SGBD cuando mandaste tu mensaje.

--------------------------------------------------------------------------------
Haciendo la prueba, tienes razón MACGREGOR. Lo que escribi fue por una experiencia con respecto a los NULL's.
Lo he probado tanto para números y caracteres y es el mismo resultado. Y bueno, también creo que confundi '' con ' '.
Vale la aclaración, y mi rectificación
__________________
"Nada en mis manos traigo tan solo a tu cruz me aferro....."
PequeñoMauro está desconectado   Responder Citando
Antiguo 10-oct-2006, 17:03   #14 (permalink)
Moderador
Mithrandir llegará a ser famoso muy prontoMithrandir llegará a ser famoso muy pronto
 
Avatar de Mithrandir
 
Fecha de Ingreso: abril-2003
Mensajes: 12.108
En SQL Server esa diferencia sí existe. Tanto que desde enterprise manager tienes una combinación de teclas especial para insertar NULL en lugar de dejar el '' que puedes haber colocado en un INSERT por separado.

Bueno conocer particularidades de otros manejadores
__________________
"El hombre, en su orgullo, creó a Dios a su imagen y semejanza."
Friedrich Nietzsche
Mithrandir está desconectado   Responder Citando
Antiguo 13-abr-2007, 13:48   #15 (permalink)
oscarpt2184 ha deshabilitado el karma
 
Fecha de Ingreso: abril-2007
Mensajes: 57
Re: null vs vacio

SOBRE TODO ESTO DEL NULL Y EL VACIO AUN NO COMPRENDO QUE HAY EN DIFERENCIA YO E TENIDO ALGUNOS DUDAS EJEM:
TABLA DE 2 CAMPOS NOMBRES Y APELLIDOS

AHORA YO HABIA MODIFICADO EN LA BASE DE DATOS MANUALMENTE HABIA BORRADO ALGUNOS APELLIDOS PERO NO EL REGISTRO OSEA TENIA : 100 nombres pero 13 con apellidos

NOMBRES APELLIDO
OSCAR TOLENTINO
MARCOS SANCHEZ
JUAN MANCO
.... los 13 registros con apeelidos

Y SOLO BORRE (TOLENTINO Y SANCHEZ) BORRE 2 APELLIDOS

NOMBRES APELLIDO
OSCAR
MARCOS
JUAN MANCO
.... los 13 registros con apeelidos


EN ANALIZAR DE CONSULTAS DE SQL COLOCO LA SIGUIENTE IONSTRUCCIOPN
SELECT * FROM TABLA1 -- EL RESULTADO ES OK(100 REGISTROS)
SELECT * FROM TABLA1 WHERE NOMBRE IS NULL --- EL RESUALTADO ES 85
SELECT * FROM TABLA1 WHERE NOMBRE = ' ' --- EL RESULTADO ES 2


AHORA LA PREGUNTA ES... POR QUE HACE ESA DIFERENCIA CUANDO EJECUTAS ESTAS INTRUCCIONES!!!!!!


POOR FAVOR SI ALGUIN PUEDE AYUDAR CON ESTO MI CORREO ES bus_enam hotmail
oscarpt2184 está desconectado   Responder Citando
Antiguo 14-abr-2007, 08:55   #16 (permalink)
(Desactivado)
Developer9 Developer9
 
Avatar de Developer9
 
Fecha de Ingreso: abril-2005
Ubicación: Mi Ecuador del alma
Mensajes: 4.202
Enviar un mensaje por MSN a Developer9
Re: null vs vacio

Eso significa que ''<>NULL

NULL ni siquiera ocupa espacio, es como una variable declarada pero no utilizada.

'' es como cuando la instancias pero aun no guardas nada en ella.

Cuando tu borraste en dos registros los apellidos dichos campos no quedaron en NULL
Developer9 está desconectado   Responder Citando
Antiguo 17-abr-2007, 04:33   #17 (permalink)
MACGREGOR está en el buen camino
 
Avatar de MACGREGOR
 
Fecha de Ingreso: enero-2005
Mensajes: 89
De acuerdo Re: null vs vacio

Lo primero que deberías aclarar es que sistema gestor de BBDD utilizas.

Como se ha dicho en los mensajes anteriores algunos como ORACLE consideran la cadena vacía como NULL.

Otros SGBD's como Sql-Server no consideran la cadena vacía como un NULL (guardan un signo de final de cadena del estilo de \n o \n\r) por lo tanto guardan algo y el campo no es NULL.

Has hecho las siguientes pruebas:
SELECT * FROM TABLA1 -- EL RESULTADO ES OK(100 REGISTROS)
SELECT * FROM TABLA1 WHERE NOMBRE IS NULL --- EL RESUALTADO ES 85
SELECT * FROM TABLA1 WHERE NOMBRE = ' ' --- EL RESULTADO ES 2

Supongo que cuando has puesto NOMBRE querías decir APELLIDO, has dicho que habías borrado apellidos no nombres...
En tu última consulta has puesto un espacio en blanco entre las comillas simples.... eso no es NULL es una cadena con un espacio en blanco!!

Que significa el resultado de tus consultas?
1- tienes 100 registros.
2- 85 registros tienen "APELLIDO" nulo (NULL) sin apellido, vacíos
3- 2 registros tienen "APELLIDO" = "espacio en blanco"

(También decías que habías dejado en la tabla 13 registros con nombre y apellido)

Conclusión: 85 nulos + 2 con espacio en blanco + 13 con apellidos = 100.
MACGREGOR está desconectado   Responder Citando
Antiguo 17-abr-2007, 08:20   #18 (permalink)
luise32 ha deshabilitado el karma
 
Fecha de Ingreso: noviembre-2006
Mensajes: 53
Re: null vs vacio

Excelente analisis y deduccion, 100% de acuerdo con eso
luise32 está desconectado   Responder Citando
Antiguo 19-abr-2007, 11:57   #19 (permalink)
oscarpt2184 ha deshabilitado el karma
 
Fecha de Ingreso: abril-2007
Mensajes: 57
Re: null vs vacio

Mmmmmm...
Disclupen Pero No Me Explique Bien!!!!!!!!
Espero Que Ahora Me Entiendan

Vemos Me Explico Mejor.
Yo E Trabajado En Sql 2000 ' Este El Manejdaro De Base De Datos

Ahora Tenemos Un Tabla "clientes" Con 2 Campos (nombres Y Apellido)con 20 Registros Y Que En El Campo Apellidos Hay 10registros Que Tienen Osea

De Los 20 Registros 10 Tienen Apellidos Y El Resto No, Que Estan Como Nulo. Ahora Ingrese A La Base De Datos Y De Los 10 Registros Que Tiene Apellido Borre 5 Mas No Elimine El Registro Solo El Apeelido
Y Ahi Mismo Cuando Se Observa Que El Campo Borrado No Se Pone Null.. Y Ahora Voy Al Analizador De Consulta Y Ejecuto Estas Instrucciones

Select*from Clientes ' Resultado 20 Registros
Select*from Clientes Where Apellido Is Null ' Resultado 10 Registro
Select*from Clientes Where Apellido<>'' ' Resultado 5
Select*from Clientes Where Apellido='' ' Resultado 5

('') Son Apostofres

Asi Quedo La Tabla Observen!!!!!!

__________________________________________________ __
|nombre |apellido |
------------------------------------------------------------
|nombre1 |apellido1 |
|nombre2 |apellido2 |
|nombre3 |apellido3 |
|nombre4 |apellido4 |
|nombre5 |apellido5 |
|nombre6 | |
|nombre7 | |
|nombre8 | |
|nombre9 | |
|nombre10 | |
|nombre11 |<null> |
|nombre12 |<null> |
|nombre13 |<null> |
|nombre14 |<null> |
|nombre15 |<null> |
|nombre16 |<null> |
|nombre17 |<null> |
|nombre18 |<null> |
|nombre19 |<null> |
|nombre20 |<null> |


Espero Que Ahora Si Me Aya Dejado Entender Y Pes Se De Un Reultado Entre La Diferencia De Un Null Y Vacio

Gracias A Todos Que Den Un Resultado
oscarpt2184 está desconectado   Responder Citando
Antiguo 26-sep-2007, 03:36   #20 (permalink)
clonator ha deshabilitado el karma
 
Fecha de Ingreso: septiembre-2007
Mensajes: 1
Re: null vs vacio

Hola Soy nuevo en el foro, estoy completamente de acuerdo con mcgregor, yo tambien soy dba de oracle, en oracle hay una funcion llamada DUMP con la que puedes ver la informacion que tienes en base de datos tal cual esta almacenada de forma binaria, decimal o hexadecimal. un ejemplo seria

SELECT dump(columna,1016) from table;

con esta instruccion te devuelve los valores de la columna 'columna' pero en formato hexadecimal asi puedes ver realmente que es lo que tienes almacenado en tu base de datos. Desconozco si hay una funcion parecida en sqlServer, seria bueno que googlearas por ahi.

Por otro lado '' no es lo mismo que ' ' la primera es una cadena vacia y la segunda es una cadena que equivale a "un espacio"
clonator está desconectado   Responder Citando
Antiguo 26-sep-2007, 06:17   #21 (permalink)
Kelpie ha deshabilitado el karma
 
Avatar de Kelpie
 
Fecha de Ingreso: noviembre-2002
Ubicación: NorthSpain
Mensajes: 606
Re: null vs vacio

Lo siguiente se refiere solo a SGBD que diferencien entre vacío y nulo

La diferencia entre un campo vacío y uno nulo es la virginidad del campo. Un campo nulo está vírgen. Una vez que se carga un valor (cualquier valor) deja de ser nulo. Luego, por más que quieras vaciarlo no volverá a ser virgen (nulo).


OscarRpt, los resultados que obtienes es fiel reflejo de lo que tienes en la tabla:

10 registros con apellido nulo (no inicializado, campo vírgen)
5 registros con apellido vacío (inicializado pero borrado. NO vírgen)
5 registros con apellido.

De todas maneras, un campo puede volver a ser vírgen (nulo):

Update clientes set apellido=Null WHERE apellido=""
__________________
Kelpie
Kelpie está desconectado   Responder Citando
Antiguo 26-sep-2007, 09:43   #22 (permalink)
kunndry está en el buen camino
 
Avatar de kunndry
 
Fecha de Ingreso: abril-2004
Ubicación: Alicante / España
Mensajes: 242
Re: null vs vacio

Voy a animarme a opinar tambien...probablemente liando más la cosa, jeje.

Yo no aconsejaria a nadie tratar la cadena vacia y la nula de igual manera, independientemente de que las ultimas versiones de oracle(imagino que seran las ultimas) las traten asi.

De esto no estoy seguro al 100%, pero creo recordar que oracle 8 no las trataba igual (No tengo ni idea de por cual van, no trabajo con Oracle).

Alguien por arriba comento que creia que el Standard no define vacio y null equivalente, y yo estoy con el.

Si se tratan de igual manera, si en un futuro se tiene que migrar de una base de datos a otra, puede dar problemas.

Y como ya han dicho, el null es que se desconoce el valor, y la cadena vacia es que se conoce y es vacio.

Un ejemplo, podria ser, un listado de clientes, y en el campo telefono, null o vacio. Null seria que no sabes si tiene numero de telefono, y vacio que no lo tiene (Esto es un ejemplo algo tonto, pero para aclarar ideas puede servir).

Un saludo a todos!
__________________
Cine
Bases de datos
kunndry está desconectado   Responder Citando
Antiguo 02-oct-2007, 09:08   #23 (permalink)
MACGREGOR está en el buen camino
 
Avatar de MACGREGOR
 
Fecha de Ingreso: enero-2005
Mensajes: 89
Re: null vs vacio

Veo que se ha vuelto a reabrir este post sobre NULL vs Vacio.

He releido los mensajes y creo que queda muy clara la diferencia entre NULL y Vacio.

En los últimos mensajes únicamente se genera polémica en torno a la cadena vacía.
Creo que también quedó claro que en ORACLE equivale a NULL y en Sql-Server NO. (provablemente en otros SGBD's tampoco).

Se ha hablado de si se ha definido de una manera o de otra en el standard sql...

Lo cierto es que a efectos prácticos es indiferente.

Lo importante es saber como dice Mithrandir
En SQL Server esa diferencia sí existe. Tanto que desde enterprise manager tienes una combinación de teclas especial para insertar NULL en lugar de dejar el '' que puedes haber colocado en un INSERT por separado.
Bueno conocer particularidades de otros manejadores


También se ha hablado de migrar una DDBB a otra...
Si tienes una DDBB ORACLE da lo mismo si insertas cadenas vacias o NULL's el SGBD inserta NULL de todas formas, lo importante es saber que una vez termines de migrar los datos (a Sql-Server por ej.) no tendrás ninguna cadena vacía todo nulls.
Y si la migración es hacia ORACLE debes saber que tendrás registros con NULL y otros con un carácter "extraño" que antes significaba cadena vacia.(provablemente un \n o \n\r como ya dije en otro mensaje anterior).

Siento mucho si me repito, pero lo importante es el "conocimiento", saber el comportamiento del SGBD con el que trabajas y saber las diferencias que tiene con otros.

Obviamente todo el mundo tiene derecho a opinar que forma le parece más razonable. Personalmente me resulta muy cómodo como lo maneja ORACLE, pero veo más lógica la otra forma.
MACGREGOR está desconectado   Responder Citando
Respuesta

Calificación: Calificación de Tema: 2 votos, 3,00 de promedio.


Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder temas
No puedes subir archivos adjuntos
No puedes editar tus mensajes

BB code is Activado
Caritas están Activado
[IMG] está Activado
Código HTML está Desactivado


La Zona horaria es GMT -6. Ahora son las 12:03.