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
.