No MariaDB,
UNCOMPRESSED_LENGTH()
é uma função interna que retorna o comprimento de uma string compactada antes de ser compactada com o COMPRESS()
função. Sintaxe
A sintaxe fica assim:
UNCOMPRESSED_LENGTH(compressed_string)
Onde
compressed_string
é a string comprimida. Exemplo
Segue um exemplo básico:
SELECT UNCOMPRESSED_LENGTH(COMPRESS(REPEAT('z', 50)));
Resultado:
+------------------------------------------------+ | UNCOMPRESSED_LENGTH(COMPRESS(REPEAT('z', 50))) | +------------------------------------------------+ | 50 | +------------------------------------------------+
Aqui, eu usei o
REPEAT()
função para repetir a mesma letra 50 vezes. Repetir o caractere o torna um bom candidato para compactação. Comparado com a string compactada
Aqui está novamente, comparado à string compactada:
SELECT
LENGTH(COMPRESS(REPEAT('z', 50))) AS "Compressed",
UNCOMPRESSED_LENGTH(COMPRESS(REPEAT('z', 50))) AS "Uncompressed";
Resultado:
+------------+--------------+ | Compressed | Uncompressed | +------------+--------------+ | 16 | 50 | +------------+--------------+
Comprimento de bytes versus comprimento de caractere
O
UNCOMPRESSED_LENGTH()
relata o comprimento em bytes (em oposição a apenas comprimento de caracteres). Podemos testar isso usando um caractere de vários bytes, como o símbolo de copyright (
©
), passando-o para funções como LENGTH()
para obter o comprimento em bytes e CHAR_LENGTH()
para obter o comprimento do caractere:SELECT
UNCOMPRESSED_LENGTH(COMPRESS(REPEAT('©', 50))) AS "UNCOMPRESSED_LENGTH()",
LENGTH(REPEAT('©', 50)) AS "Uncompressed (Bytes)",
LENGTH(COMPRESS(REPEAT('©', 50))) AS "Compressed (Bytes)",
CHAR_LENGTH(REPEAT('©', 50)) AS "Uncompressed (Char)",
CHAR_LENGTH(COMPRESS(REPEAT('©', 50))) AS "Compressed (Char)";
Resultado (usando saída vertical):
UNCOMPRESSED_LENGTH(): 100 Uncompressed (Bytes): 100 Compressed (Bytes): 17 Uncompressed (Char): 50 Compressed (Char): 17
Aqui está outro exemplo que usa um caractere tailandês:
SELECT
UNCOMPRESSED_LENGTH(COMPRESS(REPEAT('อ', 50))) AS "UNCOMPRESSED_LENGTH()",
LENGTH(REPEAT('อ', 50)) AS "Uncompressed (Bytes)",
LENGTH(COMPRESS(REPEAT('อ', 50))) AS "Compressed (Bytes)",
CHAR_LENGTH(REPEAT('อ', 50)) AS "Uncompressed (Char)",
CHAR_LENGTH(COMPRESS(REPEAT('อ', 50))) AS "Compressed (Char)";
Resultado (usando saída vertical):
UNCOMPRESSED_LENGTH(): 150 Uncompressed (Bytes): 150 Compressed (Bytes): 18 Uncompressed (Char): 50 Compressed (Char): 18
Esse caractere tailandês usa 3 bytes e, portanto, acabamos com 150 bytes para a string não compactada, mesmo que a string tenha apenas 50 caracteres.
Argumentos nulos
Passando
null
retorna null
:SELECT UNCOMPRESSED_LENGTH(null);
Resultado:
+---------------------------+ | UNCOMPRESSED_LENGTH(null) | +---------------------------+ | NULL | +---------------------------+
Argumento ausente
Chamando
UNCOMPRESSED_LENGTH()
com o número errado de argumentos ou sem passar nenhum argumento resulta em um erro:SELECT UNCOMPRESSED_LENGTH();
Resultado:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'UNCOMPRESSED_LENGTH'