¿Estas aprendiendo sobre manejadores de base de datos? En ese caso, necesitas informarte sobre los tipos de datos en MySQL, uno de los mejores y más usados en el mundo ¡No pierdas la oportunidad!.
Tipos de datos en MySQL
Cada vez que necesitemos crear una tabla que sirva para guardar datos de una aplicación, debemos saber identificar qué tipo de datos nos sirven para almacenar mejor todo lo que nos veamos en la necesidad de archivar. Podemos escoger entre tres: datos numéricos, cadenas (alfanumérico), y fechas y horas.
En estos campos de las tablas MYSQL tenemos la posibilidad de elegir entre tres tipos de contenido, y aunque parezca algo obvio, determinar a dónde enviar nuestros datos, a qué tipo de grupo pertenecerá el almacenamiento, aquí tenemos un ejemplo para ponernos en contexto: si nos hace falta un campo con el que podamos almacenar la edad de una persona, entonces sería un campo de dato numérico.
Pero antes de seguir explicando, ¿Sabes lo que es el MySQL? Se le conoce como uno de los manejadores de base de datos con código abierto más usados en el mundo. Para que podamos tener una idea de lo popular que es, te diremos que: WordPress es el gestor de diferentes tipos de contenido, el cual existe desde el 2003, y que alrededor de 55% a 60% de las páginas web que existen, están hechas gracias a esto, y este usa el MySQL como base de datos, así que esto prueba lo útil que puede llegar a ser y el alcance que tiene.
MySQL le pertenece a la compañía Oracle Corporation, quienes fueron los encargados de comprarlo en el 2010. Este manejador tiene múltiples usos, tales como: prácticas, realizar instalaciones, modificar páginas web, lectura de datos, entre otros.
Este manejador puede ser fácilmente descargada y cuenta con varias versiones dependiendo del Windows que estés utilizando, de igual manera, es muy sencillo instalarlo.
La gran mayoría de los manejadores de base de datos son utilizados a través de un lenguaje de programación. Digamos que por ejemplo, la información que nosotros tenemos en nuestras computadoras, se encuentra disponible en la base de datos, pero al momento que necesitamos visualizarla y manejarla, esta utiliza un lenguaje de programación; en el caso de MySQL, viene acompañado de php, lo cual se le conoce como un lenguaje de desarrollo web, el mismo con el que se desarrolla WordPress.
Suponemos que podemos recomendar, para mayor rapidez, descargar la herramienta XAMPP, la cual está disponible para varias versiones de Windows. El XAMPP viene con una serie de componentes, entre ellos tenemos:
- Apache: Este vendría siendo un servidor web.
- PHP: El lenguaje de desarrollo web.
- Fillezilla: Es el encargado de movilizar los archivos.
- Mercury: Es el servidor de correo, el cual tiene la finalidad de hacer los test.
- MySQL: Como mencionamos anteriormente, es el servidor de base de datos.
Luego de instalar el XAMPP, podrás disfrutar de todos estos componentes, incluyendo el MySQL, el cual puedes iniciar directamente y conectarte a la interfaz gráfica, por eso XAMPP es que es sumamente útil, además de contar con los otros componentes.
Teniendo todo esto claro, queríamos explicar que dentro de nuestras opciones para tipos de tablas para almacenar nuestros datos, y hablando del campo de dato numérico, dentro de este mismo tenemos otros tipos, y debemos saber cuál sería el mejor, cuál nos daría la oportunidad de consumir menos espacio de almacenamiento físico y nos brindará la oportunidad de datos que esperamos almacenar en ese campo. La única manera de comprender estas cuestiones es los distintos tipos de datos que MySQL nos brinda, a continuación estaremos brindando esa información para poder entender los usos más apropiados de cada grupo.
Te invitamos a ver un curso intensivo sobre los tipos de datos en MySQL y todo lo que necesitas saber sobre este, en el vídeo a continuación ¡No pierdas la oportunidad de aprender!:
Datos numéricos
La diferencia que podríamos encontrar entre uno y otro tipo de datos en MySQL es sencillamente el rango de valores que esté pueda contener. Dentro de los datos numéricos necesitamos ver qué podemos distinguir dos grandes ramas: enteros y decimales; ahora, nos gustaría explicar los tipos de datos numéricos de los que podemos disponer según la situación que se nos presente y lo que necesitemos:
Numéricos enteros
Lo primero que queremos explicar ya llegados a este punto, es que las opciones que tenemos para almacenar este tipo de datos vendrían siendo edades, cantidades y magnitudes sin decimales. También nos gustaría presentar un ejemplo para dar a comprender mejor qué tipo de dato nos conviene elegir para cada campo:
Te presentamos TINYINT, un tipo de dato que nos permite almacenar como máximo el valor de 127. Entonces si necesitamos definir un campo para la edad de nuestros usuarios, este es el que podríamos usar, porque el rango normal de edad está dentro de ese número, y a menos que estemos viviendo en la época del antiguo testamento bíblico, nadie biológicamente sobrepasaba ese número; entonces no, este tipo de dato no nos permite almacenar en 567, por ejemplo, ni siquiera un 128, si límite llega a 127.
Ahora, si queremos definir un campo para un identificador de un gran mercado de vender miles de cosas distintas y variadas, esto cambiaría exponencialmente, claramente TINYINT ya no nos sirve, además de esto deberíamos conocer con mucha precisión la cantidad de artículos que comercializa, pero no solo con lo que tenemos actualmente, sino intentando hacer una predicción para nuestro futuro próximo, de este modo nuestro sistema de almacenamiento no quedará obsoleto rápidamente.
Podríamos usar algo como SMALLINT que nos permitirá numerar hasta 32,000 artículos, pero si cambiamos de ejemplo y nos movemos de un mercado a un campo ID que deba utilizarse para una tabla de clientes de una empresa telefónica con 5 millones de usuarios, ya no podríamos disponer de SMALLINT, sino de alguno otro como MEDIUMINT, y seguimos, en el caso de que nuestra empresa tuviera 200 millones de clientes, deberíamos usar un campo de tipo INT. El asunto cambia en el caso de ponernos caprichosos y querer definir un campo que identifique a cada uno de los seres humanos que vivimos en el planeta tierra, entonces deberíamos pedirle ayuda a un campo BIGNIT, ya que los de tipo INT solo permiten hasta dos mil millones de datos diferentes, y eso claramente no nos alcanzaría.
También queremos confirmar la existencia de valores negativos, que podríamos encontrar al querer guardar el puntaje de un juego, o la marca bajo cero que podría marcar una tabla, entre otras cosas.
Valores sin signo
Veámoslo de la siguiente manera: tener una edad negativa no tendría nada de sentido. Si existe la posibilidad de duplicar el límite del valor máximo positivo de cada dato eliminando la posibilidad de que ese campo pueda almacenar valores negativos, estaríamos duplicando el límite positivo de almacenamiento, y el campo de tipo TINYINT que normalmente permitía almacenar valores de 127, ahora dejará almacenar valores del 0 al 255.
¿Y cómo definimos un campo que no tiene signo? Mediante el modificador UNSIGNED que podemos definirle a un campo numérico. Usando este nos deberíamos encontrar con una columna que lea Atributos y el valor de UNSIGNED y este campo ya no podrá contener valores negativos, duplicando entonces su capacidad de almacenamiento.
No está de más mencionar que es importante que en el momento de definir un campo en la columna que nos encontraríamos como Longitud escribamos un número coherente con la capacidad de almacenamiento que acabamos de elegir. Siguiendo con el ejemplo de la edad, si estamos trabajando con TINYNIT, debemos colocar como longitud un tres, no un número mayor ni menor.
Números con decimales
Precios, salarios, importes de cuentas bancarias, entre otros, nos hemos trasladado a los valores numéricos con decimales y hemos dejado atrás los números enteros, y a pesar de que estos tipos de datos se llaman «de coma flotante» porque la coma separa la parte entera y la parte decimal, en realidad entre los tipos de datos MySQL, los almacena separándolos con un punto; a partir de aquí dispondríamos de tres tipos de datos: FLOAT, DOUBLE Y DECIMAL.
FLOAT nos permitirá almacenar como mínimo el valor -999.99 y como máximo 999.99. Tomemos en cuenta que el signo – no cuenta, pero el punto que los separa, es decir, el punto decimal, sí, por eso serían seis dígitos en total, aunque notemos que dos de ellos sean decimales; pero tenemos algo llamado rango de precisión simple, lo que nos obliga a que las cantidades decimales estén entre 0 y 24.
En cambio DOUBLE, al ser del doble de precisión, solo permite que la cantidad de decimales se defina entre 25 y 23. Usar FLOAT que es de simple precisión podría traer problemas de redondeo y pérdida de los decimales restantes. El que nos queda por explicar es DECIMAL, que es lo mejor para almacenar valores monetarios dónde se requiera menor longitud pero la máxima exactitud, y sin redondeos, este tipo de datos le asigna un ancho fijo a la cifra que almacenará. El máximo de dígitos totales para este tipo de datos es de 64, de los cuales 30 es el número de decimales máximo permitido, más que suficiente para almacenar precios, salarios y monedas.
Datos alfanuméricos
Finalmente nos salimos de la categoría de datos numéricos para entrar a otra nueva. Aquí estaremos hablando de almacenar cadenas de caracteres, para explicarlo de mejor manera, y entre los tipos de datos en MySQL poseemos los siguientes: CHAR, VARCHAR, BINARY, VARBINARY, TINYBLOB, TINYTEXT, BLOB, TEXT, MEDIUMBLOB, MEDIUMTEXT, LONGBLOB, LONGTEXT, ENUM y SET, cada uno tiene sus propias características y sus propias ventajas dependiendo de qué datos queramos almacenar.
Datos de fecha y hora
Esta sería nuestra última categoría en lo que a tipos de datos en MYSQL concierne. Estaremos viendo que tenemos varias opciones para almacenar datos referidos, fechas y horas viendo la diferencia entre uno y otro y sus usos principales, de este modo estaremos en la capacidad de escoger el tipo de dato apropiado en cada caso.
DATE
Este tipo de datos en MySQL nos permite almacenar fechas dónde los cuatro primeros dígitos pertenecerían al año, los dos siguientes al mes y los últimos dos para el día, aunque en los países de habla hispana estemos acostumbrados a ordenar las fechas primero por el día, luego por el mes, y luego por el año, para el MYSQL es completamente al revés.
Es importante saber que al leer un campo DATE, aunque nos aparezca con guiones separando el año del mes y el mes del día, al momento de insertar estos datos nos permite hacerlo todo continuo, por ejemplo, podemos verlo así: 2018-06-04 e insertarlo así 20180604. El rango de fechas que DATE nos permite manejar es 1000-01-01 hasta el 9999-12-31.
A menos que tengamos alguna relación con algún evento sucedido hace dos mil años y necesitemos exponerlo, no tendremos problemas con este formato; por otro lado, con vista hacia el futuro tenemos más oportunidades, ya que con este formato llegamos casi hasta el año 10,000.
DATETIME
Teniendo un campo definido como DATETIME nos permitirá almacenar información no de una fecha, sino de un momento, un instante de tiempo, aparte de la fecha, también su horario, primero tendríamos el año, luego el mes, después el día, luego también tendríamos la hora, los minutos, e incluso los segundos, el formato se ve así:
- AAAA- MM- DD HH:MM:SS
La parte de la fecha tiene un rango similar al del tipo DATE (10,000 años) o sea, desde el 1000-01-01 al 9999-12-31. La parte del horario iría así: de 00:00:00 a 23:53:53. Todo completo se vería así: 1000-01-01 00:00:00 hasta 9999-12-31 23:59:59.
TIME
Aquí tenemos permitido almacenar horas, minutos y segundos, y sí, el tipo de dato anterior también lo hacía, pero con TIME tenemos un rango permitido que va desde: -839:59:59 hasta 839:59:59; esto vendría abarcando unos 35 días hacia atrás y hacia adelante en una fecha actual. Este tipo de dato es ideal para calcular tiempos transcurridos entre dos momentos cercanos.
TIMESTAMP
Aquí tenemos un tipo de dato que podría ser muy parecido a DATETIME pero su formato y rango son diferentes, aunque sigue siéndonos útil para almacenar una fecha y un horario. Con el campo de este formato pueden presentársenos tres opciones, la primera viene siendo: AAAA- MM- DD HH:MM:SS, la segunda es: AAAA- MM- DD, y la tercera es más simple: AA- MM- DD.
Aquí tenemos la posibilidad de tener una longitud posible de 14, 8 o 6 dígitos, todo depende de la información que proporcionemos. Este formato no es ni tan histórico ni tan futurista como los otros, pues el rango que maneja este campo solo va desde 1970-01-01 hasta el año 2037.
Además, como dato curioso, podemos establecer que su valor se mantenga actualizado automáticamente cada vez que se inserte o se actualice un registro, de esta manera siempre conservaremos en este campo la fecha y hora de nuestra última actualización de ese dato, que es realmente ideal para llevar el control sin tener la necesidad de programar nada.
Si queremos definir esto desde el phpMyAdmin, todo lo que tenemos que hacer es seleccionar en Atributos la opción que dice «on update» CURRENT_TIMESTAMP, y como el valor predeterminado CURRENT_TIMESTAMP. Campo cuyo valor se podrá actualizar automáticamente al insertar o modificar un registro.
YEAR
En el caso de que tengamos que vernos en la necesidad de definir un campo como YEAR, podremos almacenar un año, tanto utilizando dos, como también cuatro dígitos. En el caso de que lo hagamos en dos dígitos, desde 70 hasta 99 (al tener del 70 al 99 entenderemos que estos corresponden al rango de años desde 1970 hasta 1999, y si tenemos los dígitos desde el 00 hasta el 69 entonces podremos entender que se refiere a los años 2000 a 2069), en tal caso de proporcionar los cuatro dígitos entonces nos encontraríamos con que el rango posible se ampliaría, entonces yendo desde 1901 hasta 2155.
Tenemos también una posibilidad extra, aunque ajena a los tipos de datos en MySQL, pero relativa a las fechas y los horarios. Esta posibilidad extra es generar un valor de timestamp con la función time de PHP (de nuevo queremos aclarar que ya no estamos hablando de MYSQL, aunque es válido confundirse a causa de tener nombres bastante similares).
En fin, a ese valor lo podríamos almacenar en un campo INT de 10 dígitos, de esta forma, será muy simple ordenar los valores de nuestro campo (podemos poner como ejemplo la fecha de una noticia) y después podremos mostrar esa fecha transformando ese valor de timestamp en algo que podamos hacer legible mediante funciones de manejo de fechas propias de PHP.
Espero que con este artículo sobre los tipos de datos en MySQL, hayamos podido dejar lo suficientemente claro todo lo que pretendíamos explicar y hayas aprendido a crear una base de datos y una tabla según toda nuestra información, definiendo con una total precisión sus campos valiéndolos de tipos de datos y atributos, por lo tanto, estando en la capacidad, o en las condiciones, de comenzar a programar de manera adecuada, ahora teniendo claro exactamente qué formato vamos a necesitar, que se ajuste a nuestra necesidad según lo que tenemos que programar.
Te invitamos a disfrutar otro de nuestro artículos referentes a la programación: Polimorfismo en programación orientada a objetos.