Tipos de datos en MySQL
Tipos de datos en MySQL
Para almacenar TEXTO usamos cadenas de caracteres. Las cadenas se colocan entre comillas simples. Podemos almacenar dígitos con los que no se realizan operaciones matemáticas, por ejemplo, códigos de identificación, números de documentos, números telefónicos. Tenemos los siguientes tipos:
1) VARCHAR(x): define una cadena de caracteres de longitud variable en la cual determinamos el máximo de caracteres con el argumento “x” que va entre paréntesis. Su rango va de 1 a 255 caracteres. Un VARCHAR(10) ocupa 11 bytes, pues en uno de ellos almacena la longitud de la cadena. Ocupa un byte más que la cantidad definida.
2) CHAR(x): define una cadena de longitud fija, su rango es de 1 a 255 caracteres. Si la cadena ingresada es menor a la longitud definida (por ejemplo cargamos ‘Juan’ en un CHAR(10)), almacena espacios en blanco a la derecha, tales espacios se eliminan al recuperarse el dato. Un CHAR(10) ocupa 10 bytes, pues al ser fija su longitud, no necesita ese byte adicional donde guardar la longitud. por ello, si la longitud es invariable, es conveniente utilizar el tipo CHAR; caso contrario, el tipo VARCHAR.
Ocupa tantos bytes como se definen con el argumento “x”. Si ingresa un argumento mayor al permitido (255) aparece un mensaje indicando que no se permite y sugiriendo que use “BLOB” o “TEXT”. Si omite el argumento, coloca 1 por defecto.
3) BLOB o TEXT: bloques de datos de 60000 caracteres de longitud aprox.
Para los tipos que almacenan cadenas, si asignamos una cadena de caracteres de mayor longitud que la permitida o definida, la cadena se corta. 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.
Es importante elegir el tipo de dato adecuado según el caso, el más preciso. POR ejemplo, si vamos a almacenar un carácter, conviene usar CHAR(1), que ocupa 1 byte y no VARCHAR(1), que ocupa 2 bytes.
Tipo Bytes de almacenamiento
CHAR(x) x
VARCHAR(x) x+1
20.- Tipos de datos (numéricos)
Existe variedad de tipos numéricos para representar enteros, negativos, decimales.
Para almacenar valores enteros, por ejemplo, en campos que hacen referencia a cantidades, precios, etc., usamos:
1) INTEGER(x) o INT(x): su rango es de -2000000000 a 2000000000 aprox. El tipo “INT UNSIGNED” va de 0 a 4000000000.
El tipo “INTEGER” tiene subtipos:
– MEDIUMINT(x): va de –8000000 a 8000000 aprox. SIN signo va de 0 a 16000000 aprox.
– SMALLINT(x): va de –30000 a 30000 aprox., sin signo, de 0 a 60000 aprox.
– TINYINT(x): define un valor entero pequeño, cuyo rango es de -128 a 127. El tipo sin signo va de 0 a 255.
– BOOL o BOOLEAN: sinónimos de TINYINT(1). Un valor cero se considera falso, los valores distintos de cero, verdadero.
– BIGINT(x): es un entero largo. Va de –9000000000000000000 a 9000000000000000000 aprox. SIN
signo es de 0 a 10000000000000000000.
Para almacenar valores con decimales utilizamos:
2) FLOAT (t,d): número de coma flotante. Su rango es de -3.4e+38 a –1.1e-38 (9 cifras).
3) DECIMAL o NUMERIC (t,d): el primer argumento indica el total de dígitos y el segundo, la cantidad de decimales. El rango depende de los argumentos, también los bytes que ocupa. Si queremos almacenar valores entre 0.00 y 99.99 debemos definir el campo como tipo “decimal (4,2)”. Si no se indica el valor del segundo argumento, por defecto es 0. Para los tipos “FLOAT” y “decimal” se utiliza el punto como separador de decimales.
Todos los tipos enteros pueden tener el atributo “UNSIGNED”, esto permite sólo valores positivos y duplica el rango. Los tipos de coma flotante también aceptan el atributo “UNSIGNED”, pero el valor del límite superior del rango no se modifica.
Es importante elegir el tipo de dato adecuado según el caso, el más preciso. POR ejemplo, si un campo numérico almacenará valores positivos menores a 10000, el tipo “INT” no es el más adecuado, porque su rango va de -2000000000 a 2000000000 aprox., conviene el tipo “SMALLINT UNSIGNED”, cuyo rango va de 0 a 60000 aprox. De esta manera usamos el menor espacio de almacenamiento posible.
Tipo à Bytes de almacenamiento
SMALLINT | à | 2 | FLOAT | à | 4 |
MEDIUMINT | à | 3 | DECIMAL (t,d) | à | t+2 si d>0, t+1 si d=0 y d+2 si t<d |
INT | à | 4 | |||
BIGINT | à | 8 |
21.- Tipos de datos (fechas y horas)
Para guardar fechas y horas dispone de varios tipos:
1) DATE: representa una fecha con formato “YYYY-MM-DD”. El rango va de “1000-01-01” a “9999-
12-31”.
2) DATETIME: almacena fecha y hora, su formato es “YYYY-MM-DD HH:MM:SS”. El rango es de
“1000-01-01 00:00:00” a “9999-12-31 23:59:59”.
3) TIME: una hora. Su formato es “HH:MM:SS”. El rango va de “-838:59:59” a “838:59:59”.
4) YEAR(2) y YEAR(4): un año. Su formato es “YYYY” o “YY”. Permite valores desde 1901 a 2155 (en formato de 4 dígitos) y desde 1970 a 2069 (en formato de 2 dígitos).
Si ingresamos los valores como cadenas, un valor entre “00” y “69” es convertido a valores “YEAR” en el rango de 2000 a 2069; si el valor está entre “70” y “99”, se convierten a valores “YEAR” en el rango 1970 a 1999.
Si ingresamos un valor numérico 0, se convierte en “0000”; entre 1 y 69, se convierte a valores
“YEAR” entre 2001 a 2069; entre 70 y 99, es convertido a valores “YEAR” de 1970 a 1999. Para almacenar valores de tipo fecha se permiten como separadores “/”, “-” y “.”.
Si ingresamos ’06-12-31′ (año de 2 dígitos), lo toma como ‘2006-12-31’.
Si ingresamos ‘2006-2-1’ (mes y día de 1 dígito), lo toma como ‘2006-02-01’.
Si ingresamos ‘20061231’ (cadena sin separador), lo toma como ‘2006-12-31’. Si ingresamos 20061231 (numérico), lo toma como ‘2006-12-31’.
Si ingresamos ‘20061231153021’ (cadena sin separadores), lo toma como ‘2006-12-31 15:30:21’.
Si ingresamos ‘200612311530’ (cadena sin separadores con un dato faltante) no lo reconoce como fecha-hora y almacena ceros.
Si ingresamos ‘2006123’ (cadena sin separadores con un dato faltante) no lo reconoce como fecha y almacena ceros.
Si ingresamos ‘2006-12-31 11:30:21’ (valor date time) en un campo ‘DATE’, toma sólo la parte de la fecha, la hora se corta, se guarda ‘2006-12-31’.
Es importante elegir el tipo de dato adecuado según el caso, el más preciso. Por ejemplo, si sólo necesitamos registrar un año (sin día ni mes), el tipo adecuado es “YEAR” y no “date”.
Tipo bytes de almacenamiento
DATE 3
DATETIME 8
TIME 3
YEAR 1
22.- valores por defecto
Para campos declarados “NOT NULL”, el valor por defecto depende del tipo de dato. Para cadenas de caracteres el valor por defecto es una cadena vacía. Para valores numéricos el valor por defecto es 0; en caso de ser “AUTO_INCREMENT” es el valor mayor existente+1 comenzando en 1. Para campos de tipo fecha y hora, el valor por defecto es 0 (por ejemplo, en un campo “date” es “0000-00-
00”).
Para todos los tipos, excepto “BLOB”, “TEXT” y “AUTO_INCREMENT” se pueden explicitar valores por defecto con la cláusula “DEFAULT”.
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.
Los campos para los cuales no se ingresaron valores tomarán los valores por defecto según el tipo de dato del campo, en el campo “codigo” ingresará el siguiente valor de la secuencia porque es “AUTO_INCREMENT”; en el campo “nombre”, ingresará una cadena vacía porque es “VARCHAR NOT NULL”; en el campo “direccion” almacenará “NULL”, porque no está definido “NOT NULL”; en el campo “pago” guardará “NULL” porque es el valor por defecto de los campos no definidos como “NOT NULL” y en el campo “cantidad” ingresará 0 porque es el valor por defecto de los campos numéricos que no admiten valores nulos.
Tipo valor por defecto Cláusula “DEFAULT”
caracter NOT NULL cadena vacía permite numerico NOT NULL 0 permite fecha NOT NULL 0000-00-00 permite
hora NOT NULL 00:00:00 permite auto_INcrement siguiente de la sec., empieza en 1 no permite carac.,numer.,fecha,hORa NULL NULL
Si quieres seguir aprendiendo con nosotros, puedes ingresar a nuestros