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

Inserciones con fecha 0000-00-00 cuando el campo es vacio

Estas en el tema de Inserciones con fecha 0000-00-00 cuando el campo es vacio en el foro de Mysql en Foros del Web. Hola Tengo una pregunta, cree un campo en una bd de tipo date, pero cuando inserto como un campo vacio ( '' ), este me ...
  #1 (permalink)  
Antiguo 17/06/2010, 19:32
 
Fecha de Ingreso: marzo-2009
Mensajes: 18
Antigüedad: 15 años, 7 meses
Puntos: 0
Inserciones con fecha 0000-00-00 cuando el campo es vacio

Hola

Tengo una pregunta, cree un campo en una bd de tipo date, pero cuando inserto como un campo vacio ( '' ), este me lo guarda de esta forma.

0000-00-00

Yo quiero cuando lo guarde como vacio me lo deje como null o con alguna fecha por defecto como 1970-01-01

¿Como lo puedo hacer?
He probado con NO_ZERO_DATE y con NO_ZERO_IN_DATE pero no funciona para las inserciones.

¿Como puedo hacer esto?
  #2 (permalink)  
Antiguo 17/06/2010, 20: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: 17 años
Puntos: 2658
Respuesta: Inserciones con fecha 0000-00-00 cuando el campo es vacio

O NULL o con una fecha. No puedes darle dos posibilidades.
En cualquier caso, eso se resuelve en la definición de la tabla:
Código MySQL:
Ver original
  1. CREATE TABLE tabla(fecha DATE DEFAULT NULL);
o bien
Código MySQL:
Ver original
  1. CREATE TABLE tabla(fecha DATE DEFAULT '0000-00-00' ;
__________________
¿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 18/06/2010, 10:49
 
Fecha de Ingreso: marzo-2009
Mensajes: 18
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: Inserciones con fecha 0000-00-00 cuando el campo es vacio

Hola,

Muchas gracias por tu respuesta, pero te adjunto el ejemplo creo una bd y defino los campos por "Default" como Null y con una fecha respectivamente, pero de todas formas cuando inserto un campo vacio ('') me da el campo 0000-00-00, solo toma los valores por defecto cuando en el insert no nombro el campo.

Código:
mysql> create table t1 (col1 DATE DEFAULT NULL, col2 DATETIME DEFAULT '1970-01-01 00:00:00') ENGINE = MyISAM;
Query OK, 0 rows affected (0.01 sec)

mysql> insert into t1 (col1,col2) values ('','');
Query OK, 1 row affected, 2 warnings (0.00 sec)

mysql> select * from t1;
+------------+---------------------+
| col1       | col2                |
+------------+---------------------+
| 0000-00-00 | 0000-00-00 00:00:00 | 
+------------+---------------------+
1 row in set (0.00 sec)

mysql> insert into t1 (col2) values ('');
Query OK, 1 row affected, 1 warning (0.00 sec)

mysql> select * from t1;
+------------+---------------------+
| col1       | col2                |
+------------+---------------------+
| 0000-00-00 | 0000-00-00 00:00:00 | 
| NULL       | 0000-00-00 00:00:00 | 
+------------+---------------------+
2 rows in set (0.00 sec)

mysql> insert into t1 (col1) values ('');
Query OK, 1 row affected, 1 warning (0.00 sec)

mysql> select * from t1;
+------------+---------------------+
| col1       | col2                |
+------------+---------------------+
| 0000-00-00 | 0000-00-00 00:00:00 | 
| NULL       | 0000-00-00 00:00:00 | 
| 0000-00-00 | 1970-01-01 00:00:00 | 
+------------+---------------------+
3 rows in set (0.01 sec)
Espero que me puedan ayudar.

Saludos.
  #4 (permalink)  
Antiguo 18/06/2010, 11:12
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Inserciones con fecha 0000-00-00 cuando el campo es vacio

Eso es obvio, porque un caracter vacío no es equivalente a NULL, por lo cual cuando lo ingresas es lo mismo que poner el menor valor representable, cosa que surge de la conversión implícita generada por MySQL.
Cuando quieres ingresar NULL, o bien no lo pones en la lista de valores a insertar, o bien le asignas NULL.

Recuerda bien: '' no es NULL.
__________________
¿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 18/06/2010, 12:01
 
Fecha de Ingreso: marzo-2009
Mensajes: 18
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: Inserciones con fecha 0000-00-00 cuando el campo es vacio

Hola,

Muchas gracias me quedo muy claro.

Pero entonces existe algun forma de que si dejo el valor como vacio automaticamente NO me deje el valor 0000-00-00 con alguna configuracion de mysql, ya que estoy ocupando un software que no me toma como valida las fechas con el formato 0000-00-00

Espero que me puedas ayudar.

Saludos.
  #6 (permalink)  
Antiguo 18/06/2010, 12:37
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Inserciones con fecha 0000-00-00 cuando el campo es vacio

1) No le pongas un vacío. En todo caso mándale un NULL a la cadena del INSERT.
2) Personaliza los INSERT. Invoca los campos a carga en forma específica.
3) Algunos conectores permiten gestionar el NULL en las fechas y otros campos. En todo caso deberías aclarar de qué lenguaje estás hablando para ver cómo.
4) Define un TRIGGER para gestionar el problema.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: cuando, vacio, fechas, 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 09:14.