MariaDB
 sql >> Base de Dados >  >> RDS >> MariaDB

Como COMPRESS() funciona no MariaDB


No MariaDB, COMPRESS() é uma função interna que compacta uma string e retorna o resultado como uma string binária.

O COMPRESS() A função requer que o MariaDB tenha sido compilado com uma biblioteca de compactação como zlib. Se o MariaDB não foi compilado com tal biblioteca de compressão, COMPRESS() retorna null .

Sintaxe


A sintaxe fica assim:
COMPRESS(string_to_compress)

Onde string_to_compress é a string que você deseja compactar.

Exemplo


Segue um exemplo básico:
SELECT
    LENGTH(REPEAT('z', 50)) AS "Uncompressed",
    LENGTH(COMPRESS(REPEAT('z', 50))) AS "Compressed";

Resultado:
+--------------+------------+
| Uncompressed | Compressed |
+--------------+------------+
|           50 |         16 |
+--------------+------------+

Aqui, usei o LENGTH() para obter o comprimento em bytes das strings descompactadas e compactadas, respectivamente. Eu usei o REPEAT() função para repetir a mesma letra 50 vezes antes de comprimi-la.

Aqui está outro exemplo que usa o símbolo de direitos autorais (© ):
SELECT
    LENGTH(REPEAT('©', 50)) AS "Uncompressed",
    LENGTH(COMPRESS(REPEAT('©', 50))) AS "Compressed";

Resultado:
+--------------+------------+
| Uncompressed | Compressed |
+--------------+------------+
|          100 |         17 |
+--------------+------------+

O símbolo de copyright é um caractere de dois bytes e seu comprimento não compactado é duas vezes o tamanho de um caractere de byte único. No entanto, a compactação dessa cadeia de caracteres repetidos de dois bytes a reduz a um tamanho semelhante à cadeia compactada de caracteres repetidos de um byte.

Aqui está um que usa um caractere de três bytes:
SELECT
    LENGTH(REPEAT('อ', 50)) AS "Uncompressed",
    LENGTH(COMPRESS(REPEAT('อ', 50))) AS "Compressed";

Resultado:
+--------------+------------+
| Uncompressed | Compressed |
+--------------+------------+
|          150 |         18 |
+--------------+------------+

Neste caso, o efeito é ainda maior. A cadeia de caracteres de três bytes repetida é reduzida para um tamanho semelhante às cadeias de caracteres de um e dois bytes repetidas nos exemplos anteriores.

Argumentos nulos


Passando null retorna null :
SELECT COMPRESS(null);

Resultado:
+----------------+
| COMPRESS(null) |
+----------------+
| NULL           |
+----------------+

Argumento ausente


Chamando COMPRESS() com o número errado de argumentos ou sem passar nenhum argumento resulta em um erro:
SELECT COMPRESS();

Resultado:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'COMPRESS'

Verificar compactação


Como mencionado, o COMPRESS() A função requer que o MariaDB tenha sido compilado com uma biblioteca de compactação como zlib. Se o MariaDB não foi compilado com tal biblioteca de compressão, COMPRESS() retorna null .

Você pode verificar o have_compress variável de sistema para ver se a biblioteca de compactação zlib está acessível ao servidor:
SELECT @@have_compress;

Resultado:
+-----------------+
| @@have_compress |
+-----------------+
| YES             |
+-----------------+

Nesse caso, a biblioteca de compactação zlib é acessível ao servidor e o resultado é YES .

Se a biblioteca de compactação zlib não estiver acessível ao servidor, o resultado será NO .