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.
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:
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
:
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:
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
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.