En MariaDB, COMPRESS()
es una función integrada que comprime una cadena y devuelve el resultado como una cadena binaria.
El COMPRESS()
La función requiere que MariaDB se haya compilado con una biblioteca de compresión como zlib. Si MariaDB no se ha compilado con una biblioteca de compresión de este tipo, COMPRESS()
devuelve null
.
Sintaxis
La sintaxis es así:
COMPRESS(string_to_compress)
Donde string_to_compress
es la cadena que desea comprimir.
Ejemplo
He aquí un ejemplo básico:
SELECT
LENGTH(REPEAT('z', 50)) AS "Uncompressed",
LENGTH(COMPRESS(REPEAT('z', 50))) AS "Compressed";
Resultado:
+--------------+------------+ | Uncompressed | Compressed | +--------------+------------+ | 50 | 16 | +--------------+------------+
Aquí, usé LENGTH()
función para obtener la longitud en bytes de las cadenas sin comprimir y comprimidas respectivamente. Usé REPEAT()
Función para repetir la misma letra 50 veces antes de comprimirla.
Aquí hay otro ejemplo que usa el símbolo de copyright (©
):
SELECT
LENGTH(REPEAT('©', 50)) AS "Uncompressed",
LENGTH(COMPRESS(REPEAT('©', 50))) AS "Compressed";
Resultado:
+--------------+------------+ | Uncompressed | Compressed | +--------------+------------+ | 100 | 17 | +--------------+------------+
El símbolo de copyright es un carácter de dos bytes y su longitud sin comprimir es el doble del tamaño de un carácter de un solo byte. Sin embargo, al comprimir esta cadena de caracteres repetidos de dos bytes, se reduce a un tamaño similar al de la cadena comprimida de caracteres repetidos de un solo byte.
Aquí hay uno que usa un carácter de tres bytes:
SELECT
LENGTH(REPEAT('อ', 50)) AS "Uncompressed",
LENGTH(COMPRESS(REPEAT('อ', 50))) AS "Compressed";
Resultado:
+--------------+------------+ | Uncompressed | Compressed | +--------------+------------+ | 150 | 18 | +--------------+------------+
En este caso, el efecto es aún mayor. La cadena de caracteres repetida de tres bytes se reduce a un tamaño similar a las cadenas de caracteres repetidas de uno y dos bytes en los ejemplos anteriores.
Argumentos nulos
Pasando null
devuelve null
:
SELECT COMPRESS(null);
Resultado:
+----------------+ | COMPRESS(null) | +----------------+ | NULL | +----------------+
Argumento faltante
Llamando a COMPRESS()
con el número incorrecto de argumentos, o sin pasar ningún argumento da como resultado un error:
SELECT COMPRESS();
Resultado:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'COMPRESS'
Comprobar la compresión
Como se mencionó, el COMPRESS()
La función requiere que MariaDB se haya compilado con una biblioteca de compresión como zlib. Si MariaDB no se ha compilado con una biblioteca de compresión de este tipo, COMPRESS()
devuelve null
.
Puede verificar el have_compress
variable del sistema para ver si el servidor puede acceder o no a la biblioteca de compresión zlib:
SELECT @@have_compress;
Resultado:
+-----------------+ | @@have_compress | +-----------------+ | YES | +-----------------+
En este caso, el servidor puede acceder a la biblioteca de compresión zlib y el resultado es YES
.
Si el servidor no puede acceder a la biblioteca de compresión zlib, el resultado sería NO
.