21 - Valores inválidos. |
Hemos visto los valores por defecto de los distintos tipos de datos.
Un valor por defecto se inserta cuando no está presente al ingresar un registro y en algunos casos en que el dato ingresado es inválido.
Un valor es inválido por tener un tipo de dato incorrecto para el campo o por estar fuera de rango.
Veamos los distintos tipos de datos inválidos.
Para campos de tipo caracter:
-valor numérico: si en un campo definido de tipo caracter ingresamos un valor numérico, lo convierte automáticamente a cadena. Por ejemplo, si guardamos 234 en un varchar, almacena '234'.
-mayor longitud: si intentamos guardar una cadena de caracteres mayor a la longitud definida, la cadena se corta guardando sólo la cantidad de caracteres que quepa. Por ejemplo, si definimos un campo de tipo varchar(10) y le asignamos la cadena 'Buenas tardes', se almacenará 'Buenas tar' ajustándose a la longitud de 10.
Para campos numéricos:
-cadenas: si en un campo numérico ingresamos una cadena, lo pasa por alto y coloca 0. Por ejemplo, si en un campo de tipo "integer" guardamos 'abc', almacenará 0.
-valores fuera de rango: si en un campo numérico intentamos guardar un valor fuera de rango, se almacena el valor límite del rango más cercano (menor o mayor). Por ejemplo, si definimos un campo 'tinyint' (cuyo rango va de -128 a 127) e intentamos guardar el valor 200, se almacenará 127, es decir el máximo permitido del rango; si intentamos guardar -200, se guardará -128, el mínimo permitido por el rango. Otro ejemplo, si intentamos guardar el valor 1000.00 en un campo definido como decimal(5,2) guardará 999.99 que es el mayor del rango.
-valores incorrectos: si cargamos en un campo definido de tipo decimal un valor con más decimales que los permitidos en la definición, el valor es redondeado al más cercano. Por ejemplo, si cargamos en un campo definido como decimal(4,2) el valor 22.229, se guardará 22.23, si cargamos 22.221 se guardará 22.22.
Para campos definidos auto_increment el tratamiento es el siguiente:
- Pasa por alto los valores fuera del rango, 0 en caso de no ser "unsigned" y todos los menores a 1 en caso de ser "unsigned".
- Si ingresamos un valor fuera de rango continúa la secuencia.
- Si ingresamos un valor existente, aparece un mensaje de error indicando que el valor ya existe.
Para campos de fecha y hora:
-valores incorrectos: si intentamos almacenar un valor que MySql no reconoce como fecha (sea fuera de rango o un valor inválido), convierte el valor en ceros (según el tipo y formato). Por ejemplo, si intentamos guardar '20/07/2006' en un campo definido de tipo "date", se almacena '0000-00-00'. Si intentamos guardar '20/07/2006 15:30' en un campo definido de tipo "datetime", se almacena '0000-00-00 00:00:00'. Si intentamos almacenar un valor inválido en un campo de tipo "time", se guarda ceros. Para "time", si intentamos cargar un valor fuera de rango, se guarda el menor o mayor valor permitido (según sea uno u otro el más cercano).
Para campos de cualquier tipo:
-valor "null": si un campo está definido "not null" e intentamos ingresar "null", aparece un mensaje de error y la sentencia no se ejecuta.
Los valores inválidos para otros tipos de campos lo trataremos más adelante.
RESUMEN: Tipo Valor inválido Resultado __________________________________________________________________________________________ caracter null/ not null 123 '123' caracter null/ not null mayor longitud se corta caracter not null null error numérico null/ not null '123' 0 numérico null/ not null fuera de rango límite más cercano numérico not null null error numérico decimal null/ not null más decimales que los definidos redondea al más cercano num. auto_incr. c/signo null/not null 0 siguiente de la secuencia num. auto_incr. s/signo null/not null todos los menores a 1 siguiente de la secuencia num. auto_incr. c/s signo null null siguiente de la secuencia num. auto_incr. c/s signo null/not null valor existente error fecha fuera de rango 0000-00-00 fecha '20-07-2006' (otro orden) 0000-00-00 hora fuera de rango límite más cercano fecha y hora not null null error