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'