sql >> Base de Datos >  >> RDS >> MariaDB

Cómo funciona COMPRESS() en MariaDB

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 .