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

Problema con valor por default

Estas en el tema de Problema con valor por default en el foro de Mysql en Foros del Web. Buenas, estoy arreglando una base, de un proyecto ya existente, el cual tengo que arreglar un poco bastante je. Por empezar, arregle ciertos problemas con ...
  #1 (permalink)  
Antiguo 28/09/2012, 08:37
Avatar de ramiro_md  
Fecha de Ingreso: septiembre-2008
Mensajes: 274
Antigüedad: 15 años, 7 meses
Puntos: 26
Problema con valor por default

Buenas, estoy arreglando una base, de un proyecto ya existente, el cual tengo que arreglar un poco bastante je.
Por empezar, arregle ciertos problemas con las claves de las tablas y sus relaciones. Todo mediante MySQL Workbench. Pero a la hora de generar la db en base al modelo corregido me devuelve el siguiente error:
Cita:
ERROR: Error 1067: Invalid default value for 'fechanacimiento'
Para la tabla usuario. Quedando el script de esta forma:
Cita:
`fechanacimiento` DATE NOT NULL DEFAULT '0000-00-00' ,
El problema es que por más que al campo le defina un valor por defecto (intenté con CURRENT_TIMESTAMP, '0000-00-00 00:00:00' y '1970-01-01 00:00:00') al generar el script de creación sigue estableciendo '0000-00-00'.
Qué puede estar pasando ??.
  #2 (permalink)  
Antiguo 28/09/2012, 08:41
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 con valor por default

Por lo pronto, si es NOT NULL, no puede tener valor por DEFAULT... Es una contradicción.
CURRENT_TIMESTAMP, por su parte, sólo es aplicable a campos TIMESTAMP, no a los DATE.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 28/09/2012, 08:42
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Problema con valor por default

ramiro_md
Como quieres establecer como valor por defecto CURRENT_TIMESTAMP, '0000-00-00 00:00:00' y '1970-01-01 00:00:00' para un campo que defines como DATE. Tendría que ser TIMESTAMP para CURRENT_TIMESTAMP. Si usas DATETIME podrías usar por defecto 1970-01-01 00:00:00.

Se me ha adelantado gnzsoloyo.
  #4 (permalink)  
Antiguo 28/09/2012, 09:07
Avatar de ramiro_md  
Fecha de Ingreso: septiembre-2008
Mensajes: 274
Antigüedad: 15 años, 7 meses
Puntos: 26
Respuesta: Problema con valor por default

Muchachos, gracias por las respuestas.
Entonces, destildé el valor NOT NULL y definí el valor DEFAULT como '1970-01-01'.
Pero el error persiste:
Cita:
ERROR: Error 1067: Invalid default value for 'fechanacimiento'
  #5 (permalink)  
Antiguo 28/09/2012, 09:42
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 con valor por default

Copia el segmento de creación de la tabla que te pone en el script generado (no lo ejecutes) y postealo acá.
Verlo es mejor que describirlo.
__________________
¿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 28/09/2012, 10:01
Avatar de Alexis_Mejias  
Fecha de Ingreso: enero-2005
Ubicación: Santiago
Mensajes: 77
Antigüedad: 19 años, 3 meses
Puntos: 17
Respuesta: Problema con valor por default

Este link te orientara

http://dunderio.com/como-usar-now-co...time-en-mysql/

al parecer algunas versiones de MySQL tienen problemas con eso.

Saludos,
__________________
Alexis Mejias C.
Freelancer Chile - Si te sirvió puntúa positivo
Blog Personal
  #7 (permalink)  
Antiguo 28/09/2012, 10:13
Avatar de ramiro_md  
Fecha de Ingreso: septiembre-2008
Mensajes: 274
Antigüedad: 15 años, 7 meses
Puntos: 26
Respuesta: Problema con valor por default

Esto es lo que quiere hacer MySQL
Código MySQL:
Ver original
  1. CREATE  TABLE IF NOT EXISTS `manantialesv2`.`usuarios` (
  2.  
  3.   `idusuario` INT(11) NOT NULL AUTO_INCREMENT ,
  4.  
  5.   `idtipodedocumento` INT(10) UNSIGNED NULL DEFAULT NULL ,
  6.  
  7.   `idnacionalidad` INT(10) UNSIGNED NOT NULL DEFAULT '0' ,
  8.  
  9.   `idlocalidad` INT(11) NOT NULL DEFAULT '0' ,
  10.  
  11.   `IdEstadoCivil` INT(10) UNSIGNED NOT NULL DEFAULT '0' ,
  12.  
  13.   `apellido` VARCHAR(30) NOT NULL DEFAULT '' ,
  14.  
  15.   `nombre` VARCHAR(30) NOT NULL DEFAULT '' ,
  16.  
  17.   `dni` VARCHAR(10) NULL DEFAULT NULL ,
  18.  
  19.   `email` VARCHAR(60) NOT NULL DEFAULT '' ,
  20.  
  21.   `nombreusuario` VARCHAR(20) NOT NULL DEFAULT '' ,
  22.  
  23.   `clave` VARCHAR(120) NOT NULL DEFAULT '' ,
  24.  
  25.   `fechanacimiento` DATE NOT NULL DEFAULT '0000-00-00' ,
  26.  
  27.   `domUsuario` VARCHAR(200) NULL DEFAULT NULL ,
  28.  
  29.   `activo` ENUM('true','false') NULL DEFAULT 'true' ,
  30.  
  31.   `bloqueado` ENUM('true','false') NOT NULL DEFAULT 'false' ,
  32.  
  33.   `fechaUltimoMovimiento` DATETIME NULL DEFAULT NULL ,
  34.  
  35.   `recomendarCambioClave` ENUM('true','false') NULL DEFAULT 'false' ,
  36.  
  37.   `nu` VARCHAR(100) NULL DEFAULT NULL ,
  38.  
  39.   PRIMARY KEY (`idusuario`) ,
  40.  
  41.   INDEX `Usuario_FKIndex1` (`idtipodedocumento` ASC) ,
  42.  
  43.   INDEX `Usuario_FKIndex3` (`IdEstadoCivil` ASC) ,
  44.  
  45.   INDEX `usuarios_FKIndex3` (`idlocalidad` ASC) ,
  46.  
  47.   INDEX `usuarios_FKIndex4` (`idnacionalidad` ASC) ,
  48.  
  49.   CONSTRAINT `usuarios_ibfk_10`
  50.  
  51.     FOREIGN KEY (`idtipodedocumento` )
  52.  
  53.     REFERENCES `manantialesv2`.`tiposdedocumento` (`idtipodedocumento` )
  54.  
  55.  
  56.  
  57.   CONSTRAINT `usuarios_ibfk_20`
  58.  
  59.     FOREIGN KEY (`IdEstadoCivil` )
  60.  
  61.     REFERENCES `manantialesv2`.`estadocivil` (`IdEstadoCivil` )
  62.  
  63.  
  64.   CONSTRAINT `usuarios_ibfk_30`
  65.  
  66.     FOREIGN KEY (`idlocalidad` )
  67.  
  68.     REFERENCES `manantialesv2`.`localidades` (`idlocalidad` )
  69.  
  70.  
  71.   CONSTRAINT `usuarios_ibfk_40`
  72.  
  73.     FOREIGN KEY (`idnacionalidad` )
  74.  
  75.     REFERENCES `manantialesv2`.`paises` (`idpais` )
  76.  
  77.  
  78.  
  79.  
  80. DEFAULT CHARACTER SET = latin1
  81.  
  82. COMMENT = 'InnoDB free: 2160640 kB; (`idtipodedocumento`) REFER `marcel'
  83.  
  84. ROW_FORMAT = REDUNDANT

A pesar de destildar el not null y especificar '1979-01-01' sigue queriendo hacer:
Código MySQL:
Ver original
  1. `fechanacimiento` DATE NOT NULL DEFAULT '0000-00-00' ,
  #8 (permalink)  
Antiguo 28/09/2012, 10:32
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Problema con valor por default

ramiro_md,
yo he tratado de crear tu tabla, quitando los índices y restricciones, y he escrito;
`fechanacimiento` DATE NOT NULL DEFAULT '1971-01-01' ,

y esa es la fecha que me pone por defecto
  #9 (permalink)  
Antiguo 28/09/2012, 10:35
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Problema con valor por default

Hola ramiro_md:

Creo que el problema no es en la linea que piensas:


Código MySQL:
Ver original
  1. mysql> CREATE TABLE `usuarios` (
  2.     -> `idusuario` INT(11) NOT NULL AUTO_INCREMENT,
  3.     -> `idtipodedocumento` INT(10) UNSIGNED NULL DEFAULT NULL ,
  4.     -> `idnacionalidad` INT(10) UNSIGNED NOT NULL DEFAULT '0' ,
  5.     -> `idlocalidad` INT(11) NOT NULL DEFAULT '0' ,
  6.     -> `IdEstadoCivil` INT(10) UNSIGNED NOT NULL DEFAULT '0' ,
  7.     -> `apellido` VARCHAR(30) NOT NULL DEFAULT '' ,
  8.     -> `nombre` VARCHAR(30) NOT NULL DEFAULT '' ,
  9.     -> `dni` VARCHAR(10) NULL DEFAULT NULL ,
  10.     -> `email` VARCHAR(60) NOT NULL DEFAULT '' ,
  11.     -> `nombreusuario` VARCHAR(20) NOT NULL DEFAULT '' ,
  12.     -> `clave` VARCHAR(120) NOT NULL DEFAULT '' ,
  13.     -> `fechanacimiento` DATE NOT NULL DEFAULT '0000-00-00' ,
  14.     -> `domUsuario` VARCHAR(200) NULL DEFAULT NULL ,
  15.     -> `activo` ENUM('true','false') NULL DEFAULT 'true' ,
  16.     -> `bloqueado` ENUM('true','false') NOT NULL DEFAULT 'false' ,
  17.     -> `fechaUltimoMovimiento` DATETIME NULL DEFAULT NULL ,
  18.     -> `recomendarCambioClave` ENUM('true','false') NULL DEFAULT 'false' ,
  19.     -> `nu` VARCHAR(100) NULL DEFAULT NULL ,
  20.     -> PRIMARY KEY (`idusuario`) ,
  21.     -> INDEX `Usuario_FKIndex1` (`idtipodedocumento` ASC) ,
  22.     -> INDEX `Usuario_FKIndex3` (`IdEstadoCivil` ASC) ,
  23.     -> INDEX `usuarios_FKIndex3` (`idlocalidad` ASC) ,
  24.     -> INDEX `usuarios_FKIndex4` (`idnacionalidad` ASC)
  25.     -> )
  26.     -> ENGINE = INNODB
  27.     -> AUTO_INCREMENT = 1324
  28.     -> DEFAULT CHARACTER SET = latin1
  29.     -> COMMENT = 'InnoDB free: 2160640 kB; (`idtipodedocumento`) REFER `marcel'
  30.     -> ROW_FORMAT = REDUNDANT;
  31. Query OK, 0 rows affected (1.46 sec)
  32.  
  33. mysql> INSERT INTO usuarios (idusuario) VALUES (NULL);
  34. Query OK, 1 row affected (0.06 sec)
  35.  
  36. mysql> SELECT idusuario, fechanacimiento FROM usuarios;
  37. +-----------+-----------------+
  38. | idusuario | fechanacimiento |
  39. +-----------+-----------------+
  40. |      1324 | 0000-00-00      |
  41. +-----------+-----------------+
  42. 1 row in set (0.00 sec)

En realidad lo que único que omití fueron las FK y funcionó bien...

Qué versión de MySQL Estás utilizando?

Saludos
Leo.
  #10 (permalink)  
Antiguo 28/09/2012, 11:00
Avatar de ramiro_md  
Fecha de Ingreso: septiembre-2008
Mensajes: 274
Antigüedad: 15 años, 7 meses
Puntos: 26
Respuesta: Problema con valor por default

Gracias por el tiempo, estoy usando 5.1
  #11 (permalink)  
Antiguo 28/09/2012, 15:01
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Problema con valor por default

Hola ramiro_md:

Insisto que no deberías tener problemas... haz la prueba creando una tabla sin tantos campos, algo como esto:

Código:
CREATE TABLE tempo (
idusuario INT(11) NOT NULL AUTO_INCREMENT,
fechanacimiento DATE NOT NULL DEFAULT '1970-01-01',
PRIMARY KEY (idusuario));
Esto debería funcionar... pero si marca error es más fácil poder analizar qué es, sin tener tantos "distractores" en la consulta.

Trata de no copiar y pegar el código... teclea la sentencia para asegurar que no estás copiando algún tipo de caracter especial...

Saludos
Leo.

Etiquetas: default, sql, tabla, campos
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 07:26.