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

Valor NULL o NOT NULL

Estas en el tema de Valor NULL o NOT NULL en el foro de Mysql en Foros del Web. Hola. No comprendo que significa en mySQL cuando le dices que un atributo sea NOT NULL o NULL. Hasta ahora pensaba que era que no ...
  #1 (permalink)  
Antiguo 06/11/2008, 07:03
 
Fecha de Ingreso: mayo-2008
Mensajes: 75
Antigüedad: 16 años
Puntos: 0
Valor NULL o NOT NULL

Hola. No comprendo que significa en mySQL cuando le dices que un atributo sea NOT NULL o NULL. Hasta ahora pensaba que era que no lo podias dejar en blanco al rellenarlo , pero cuando hago un INSERT si que me deja dejar los espacios en blanco.

¿Alguien me lo explica?
Un saludo.
  #2 (permalink)  
Antiguo 06/11/2008, 07:33
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Valor NULL o NOT NULL

Efectivamente lo habias entendido bien.

Solo un matiz no es NOT NULL o NULL sino NOT NULL o libre en todo caso, aqui NOT NOT NULL no es equivalente a NULL.

Tendrias que pasarnos el script de creacion de la tabla y el insert que te permite entrar nulos en un campo definido como NOT NULL.

No sea que estes confundiendo NULL con "" (cadena vacia). O que tengas definido un default (valor por omisión) de ese campo.

Cita:

INSERT si que me deja dejar los espacios en blanco.
los espacios en blanco= "..............................." no son un NULL

Quim

Última edición por quimfv; 06/11/2008 a las 07:43
  #3 (permalink)  
Antiguo 06/11/2008, 11:07
 
Fecha de Ingreso: mayo-2008
Mensajes: 75
Antigüedad: 16 años
Puntos: 0
Respuesta: Valor NULL o NOT NULL

Ok. Resulta que el problema es que se supone. Que he puesto a NULL nada mas que el "telefono" osea que no me deberia de dar error si relleno todos los datos menos el telefono, pues bien, hasta que no meto el telefono no me deja de dar errores. Este es mi codigo en PHP.


Código PHP:
$consulta "INSERT INTO `paciente` VALUES ('".$_POST['Dni']."', '".utf8_encode($_POST['Nombre'])."', '".utf8_encode($_POST['Apellidos'])."', '".$_POST['Sexo']."', '".utf8_encode($_POST['Pais'])."', '".utf8_encode($_POST['Poblacion'])."', '".utf8_encode($_POST['Provincia'])."', ".$_POST['CP'].", ".$_POST['Telefono'].", '".$Nacimiento."', '".utf8_encode($_POST['Direccion'])."');";
       
      
$insert mysql_query($consulta); 
El código SQL es el siguiente:

CREATE TABLE `paciente` (
`DNI` varchar(9) NOT NULL COMMENT 'Dni del paciente con letra incluida',
`Nombre` varchar(30) NOT NULL,
`Apellidos` varchar(60) NOT NULL,
`Sexo` enum('Hombre','Mujer') NOT NULL,
`Pais` varchar(25) NOT NULL,
`Poblacion` varchar(30) NOT NULL,
`Provincia` varchar(30) NOT NULL,
`CP` int(5) NOT NULL,
`Telefono` int(9) DEFAULT NULL,
`Fecha_nacimiento` date NOT NULL,
`Direccion` varchar(60) NOT NULL,
PRIMARY KEY (`DNI`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

Última edición por matheo; 06/11/2008 a las 11:14
  #4 (permalink)  
Antiguo 06/11/2008, 11:17
Avatar de Genetix  
Fecha de Ingreso: febrero-2002
Ubicación: Lima - Perú
Mensajes: 1.600
Antigüedad: 22 años, 2 meses
Puntos: 45
Respuesta: Valor NULL o NOT NULL

cual es el error que te da?
__________________
"El conocimiento nos hace responsables."
twitter: @benjamingb
blog personal: http://codigolinea.com
ZF Manual en español http://manual.zfdes.com
  #5 (permalink)  
Antiguo 06/11/2008, 12:56
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, 5 meses
Puntos: 2658
Respuesta: Valor NULL o NOT NULL

Esto huele a error de programación.
Asegurate que el string del query esté bien creado.
Y no pongas código no SQL, esta sección es de base de datos, no de PHP.
Si pones código de programación no podemos saber si el error es de SQL o de contenido de variables.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 07/11/2008, 03:53
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Valor NULL o NOT NULL

Para ver el possible error yo haria lo siguiente

$consulta = "INSERT INTO `paciente` VALUES ('".$_POST['Dni']."', '".utf8_encode($_POST['Nombre'])."', '".utf8_encode($_POST['Apellidos'])."', '".$_POST['Sexo']."', '".utf8_encode($_POST['Pais'])."', '".utf8_encode($_POST['Poblacion'])."', '".utf8_encode($_POST['Provincia'])."', ".$_POST['CP'].", ".$_POST['Telefono'].", '".$Nacimiento."', '".utf8_encode($_POST['Direccion'])."');";

echo $consulta;

Con lo que veras como se ha construido la sentencia SQL. Mira si el resultado de $_POST['Telefono'] cuando no hay telefono es lo que esperas.


Por otro lado INSERT INTO tiene varias sintaxis la que usas (manual)

INSERT INTO nombreTabla VALUES (....)

o

INSERT INTO nombreTabla (nombreCampo, ....) VALUES (...)

entre otras.

En la que tu usas no estas indicando el nombre de las columnas que vas a llenar, yo no la uso nunca me gusta controlar donde meto los datos.

Cita:
...hasta que no meto el telefono ...
esto que significa que usas algo así

$consulta = "INSERT INTO `paciente` VALUES ('".$_POST['Dni']."', '".utf8_encode($_POST['Nombre'])."', '".utf8_encode($_POST['Apellidos'])."', '".$_POST['Sexo']."', '".utf8_encode($_POST['Pais'])."', '".utf8_encode($_POST['Poblacion'])."', '".utf8_encode($_POST['Provincia'])."', ".$_POST['CP'].", '".$Nacimiento."', '".utf8_encode($_POST['Direccion'])."');";

Sin telefono, si es el caso es logico que de errores puesto que no le estas diciendo donde quieres los datos luego como hay mas columnas que datos no se si simplemente no puede hacer el insert o si lo puede hacer lo unico que puede hacer es asignar seqüencialmente los campos con lo que el ultimo quedaria vacio y esta definido como NOT NULL con lo que debe dar error.

Un comentario tienes el CP y el telèfono definidos como int que haces cuando tengan ceros a la izquierda (mi codigo postal de Sabadell/Barcelona es 08208) ...


Quim

Última edición por quimfv; 07/11/2008 a las 03:59
  #7 (permalink)  
Antiguo 07/11/2008, 04:17
 
Fecha de Ingreso: mayo-2008
Mensajes: 75
Antigüedad: 16 años
Puntos: 0
Respuesta: Valor NULL o NOT NULL

He hecho lo del echo y nada. Parece todo bien. De todos modos, desde phpmyadmn hago lo siguiente:

Esta es la creacion de la tabla:

CREATE TABLE `paciente` (
`DNI` varchar(9) NOT NULL COMMENT 'Dni del paciente con letra incluida',
`Nombre` varchar(30) NOT NULL,
`Apellidos` varchar(60) NOT NULL,
`Sexo` enum('Hombre','Mujer') NOT NULL,
`Pais` varchar(25) NOT NULL,
`Poblacion` varchar(30) NOT NULL,
`Provincia` varchar(30) NOT NULL,
`CP` int(5) NOT NULL,
`Telefono` int(9) DEFAULT NULL,
`Fecha_nacimiento` date NOT NULL,
`Direccion` varchar(60) NOT NULL,
PRIMARY KEY (`DNI`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;


Y ahora yo hago la siguiente insercion con los campos vacios:

INSERT INTO `paciente` VALUES ('', '', '', '', '', '', '', 0, 0, '0000-00-00', '');

ó

INSERT INTO `paciente` (`DNI`, `Nombre`, `Apellidos`, `Sexo`, `Pais`, `Poblacion`, `Provincia`, `CP`, `Telefono`, `Fecha_nacimiento`, `Direccion`) VALUES ('', '', '', '', '', '', '', 0, 0, '0000-00-00', '');


!!Y me lo permite tranquilamente!! Jeje. ¿Por que? ¿Que hago mal?

Última edición por matheo; 07/11/2008 a las 04:24
  #8 (permalink)  
Antiguo 07/11/2008, 05:41
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Valor NULL o NOT NULL

'' <> nulo !!!!


'' = cadena vacia !!!


Mira este hilo http://forums.mysql.com/read.php?52,128525


Intenta esto

INSERT INTO `paciente` VALUES (NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, '0000-00-00', NULL);

o esto

INSERT INTO `paciente` (`CP`, `Telefono`, `Fecha_nacimiento`) VALUES ( 0, 0, '0000-00-00');




Quim

Última edición por quimfv; 07/11/2008 a las 06:38
  #9 (permalink)  
Antiguo 10/11/2008, 12:53
 
Fecha de Ingreso: mayo-2008
Mensajes: 75
Antigüedad: 16 años
Puntos: 0
Respuesta: Valor NULL o NOT NULL

Es verdad tienes razón. :)
Ahora el problema, a ver como hago dentro de php para que cuando el usuario deje la cadena vacia , eso sea para PHP un "NULL".
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 06:06.