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.

Si el post ha sido de tu agrado te invito a que me sigas para saber cuando haya escrito un nuevo post, haya actualizado algún sistema o publicado un nuevo software. Facebook | X | Instagram | Telegram | También estoy a tus órdenes para cualquier contratación en mi página de contacto