Ver Mensaje Individual
  #1 (permalink)  
Antiguo 01/03/2013, 13:45
lne
 
Fecha de Ingreso: marzo-2013
Mensajes: 5
Antigüedad: 11 años, 10 meses
Puntos: 0
String se almacena en un campo Integer de una Tabla Mysql con el valor 0 (Cero)

Importo empleados a una Tabla (Empleados) de Base de Datos (BD) Mysql. Permitiendo en el Sistema Web, especificar al USUARIO en qué columna se encuentra los campos Apellido, Nombre y Nº de documento (los demás campos de la Tabla son opcionales y se guardan con el valor por defecto).

El problema está cuando el USUARIO se equivoca en especificar las COLUMNAS. Es decir, cuando especifica la columna APELLIDO o NOMBRE por NUMERO_DOCUMENTO (almacenando el valor 0 "Cero").

La Tabla Empleados es la siguiente:
Código MySQL:
Ver original
  1. CREATE TABLE IF NOT EXISTS `empleados` (
  2.   `apellido` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
  3.   `nombre` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
  4.   `codigo_postal` varchar(8) COLLATE utf8_unicode_ci DEFAULT NULL,
  5.   `calle` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
  6.   `numero` varchar(7) COLLATE utf8_unicode_ci DEFAULT NULL,
  7.   `piso` varchar(2) COLLATE utf8_unicode_ci DEFAULT NULL,
  8.   `departamento` varchar(4) COLLATE utf8_unicode_ci DEFAULT NULL,
  9.   `numero_documento` int(8) unsigned NOT NULL,
  10.   `numero_legajo` mediumint(8) unsigned DEFAULT NULL,
  11.   `id_estado_empleado` tinyint(1) unsigned DEFAULT '1',
  12.   `id_localidad` smallint(5) unsigned DEFAULT NULL,
  13.   `id_puesto` smallint(5) unsigned DEFAULT NULL,
  14.   `id_empresa` smallint(4) unsigned DEFAULT NULL,
  15.   `id_sexo` tinyint(1) unsigned DEFAULT NULL,
  16.   `fecha_nacimiento` date DEFAULT NULL,
  17.   `fecha_alta` date DEFAULT NULL,
  18.   `fecha_baja` date DEFAULT NULL,
  19.   `codigo` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL,
  20.   `id_origen_empleado` enum('1','2') COLLATE utf8_unicode_ci NOT NULL DEFAULT '2',
  21.   PRIMARY KEY (`id_empleado`),
  22.   KEY `id_estado_empleado` (`id_estado_empleado`),
  23.   KEY `id_localidad` (`id_localidad`),
  24.   KEY `id_puesto` (`id_puesto`),
  25.   KEY `id_empresa` (`id_empresa`),
  26.   KEY `id_sexo` (`id_sexo`)
  27. ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=53 ;
La siguiente CONSULTA 1 (obtiene el resultado deseado, el ERROR):
Código MySQL:
Ver original
  1. INSERT INTO `audical`.`empleados` (`id_empleado`, `apellido`,
  2. `nombre`, `codigo_postal`, `calle`, `numero`, `piso`, `departamento`,
  3. `numero_documento`, `numero_legajo`, `id_estado_empleado`,
  4. `id_localidad`, `id_puesto`, `id_empresa`, `id_sexo`, `fecha_nacimiento`,
  5. `fecha_alta`, `fecha_baja`, `codigo`, `id_origen_empleado`)
  6. VALUES (NULL, 'Cuello', '36123456', NULL, NULL, NULL, NULL, NULL, 'Juana',
  7. NULL, '1', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '2');
Retornando el siguiente ERROR:
1 fila insertada.
La Id de la fila insertada es: 59
Warning: #1366 Incorrect integer value: 'Juana' for column 'numero_documento' at row 1

En cambio, si utilizo esta CONSULTA 2 (que es la que utilizo en el Sistema):
Código MySQL:
Ver original
  1. INSERT INTO `audical`.`empleados` (`apellido`, `nombre`,
  2. `numero_documento`)
  3. VALUES ('Cuello', '36123456', 'Juana');
Retornando que la consulta se ejecutó exitosamente, insertando el registro:
1 fila insertada.
La Id de la fila insertada es: 60 ( La consulta tardó 0.0532 seg )

¿Por qué la CONSULTA 2 no devuelve ERROR como la CONSULTA 1?

Desde ya muchas gracias..

Última edición por gnzsoloyo; 01/03/2013 a las 14:16 Razón: SQL mal etiquetado. Usar Highlight "SQL" o "MySQL"