Comprimir y descomprimir datos en MySQL con compress y uncompress

MySQL ofrece una función llamada compress (y lo inverso, uncompress) que sirve para almacenar datos comprimidos, ahorrando espacio.

En este post voy a explicar cómo comprimir y descomprimir datos en MySQL con ejemplos.

Disponibilidad de compress y uncompress

El manual indica que para que estas funciones estén disponibles, el software debió ser compilado con una librería de compresión, por ejemplo, zlib.

Para comprobar que puedes comprimir y descomprimir datos ejecuta una simple consulta:

select compress("hola");

Si no hay problemas (como que la función no existe, o si devuelve null) entonces puedes continuar.

1 – Probar disponibilidad de compress en MySQL

Definición de tabla para guardar un dato comprimido

Se recomienda definir el tipo de dato como BLOB o VARBINARY. Como ejemplo tenemos la siguiente tabla:

create table probar_compresion(
id bigint unsigned not null auto_increment,
  original text not null,
  comprimido blob not null,
  primary key(id)
);

Para mostrar qué tanto espacio ahorramos guardamos ambos datos: el texto original y el comprimido.

Ahora es momento de insertar datos. Para insertar un valor comprimido hay que almacenar lo que devuelve la llamada de compress:

insert into probar_compresion(original, comprimido)
values
(
  "Para vivir, el hombre ha de considerar tres cosas como los valores supremos gobernantes de su vida: Razón, Propósito, Estima propia. La Razón como su única herramienta de conocimiento, el Propósito como su elección de la felicidad que con aquella herramienta ha de poder conseguir; la Estima propia como inviolable certidumbre de que su mente es competente para pensar y su persona digna de la felicidad, lo que significa digna de vivir.", 
  compress("Para vivir, el hombre ha de considerar tres cosas como los valores supremos gobernantes de su vida: Razón, Propósito, Estima propia. La Razón como su única herramienta de conocimiento, el Propósito como su elección de la felicidad que con aquella herramienta ha de poder conseguir; la Estima propia como inviolable certidumbre de que su mente es competente para pensar y su persona digna de la felicidad, lo que significa digna de vivir.")
),
(
  "Keep your 'lectric eye on me babe
Put your ray gun to my head
Press your space face close to mine, love
Freak out in a moonage daydream oh yeah", 
  compress("Keep your 'lectric eye on me babe
Put your ray gun to my head
Press your space face close to mine, love
Freak out in a moonage daydream oh yeah")
);

Son algunos ejemplos de prueba. La inserción es correcta, ahora utilizaré la función LENGTH para medir la longitud de los datos…

select length(original), length(comprimido) from probar_compresion;

Con el siguiente resultado:

2 – Comprobar diferencia entre valor original y comprimido

En el primer caso, el original mide 437 y el comprimido 253; en el segundo caso el original es de 140 y el comprimido de 116.

La razón de compresión no siempre será la misma, pues depende de varios factores y del algoritmo de compresión.

Lo importante es que los datos realmente se están comprimiendo. Para recuperar los datos originales se invoca a uncompress.

select uncompress(comprimido) from probar_compresion\G

3 – Descomprimir datos en MySQL usando uncompress

Así se puede recuperar el valor original.

Podemos hacer updates, llamar a otras funciones y todas las cosas permitidas, pues al final compress y uncompress son funciones de MySQL.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *