En MariaDB, UNCOMPRESSED_LENGTH()
es una función integrada que devuelve la longitud de una cadena comprimida antes de que fuera comprimida con COMPRESS()
función.
Sintaxis
La sintaxis es así:
UNCOMPRESSED_LENGTH(compressed_string)
Donde compressed_string
es la cadena comprimida.
Ejemplo
He aquí un ejemplo básico:
SELECT UNCOMPRESSED_LENGTH(COMPRESS(REPEAT('z', 50)));
Resultado:
+------------------------------------------------+ | UNCOMPRESSED_LENGTH(COMPRESS(REPEAT('z', 50))) | +------------------------------------------------+ | 50 | +------------------------------------------------+
Aquí, usé REPEAT()
Función para repetir la misma letra 50 veces. La repetición del carácter lo convierte en un buen candidato para la compresión.
Comparado con la cadena comprimida
Aquí está de nuevo, en comparación con la cadena comprimida:
SELECT
LENGTH(COMPRESS(REPEAT('z', 50))) AS "Compressed",
UNCOMPRESSED_LENGTH(COMPRESS(REPEAT('z', 50))) AS "Uncompressed";
Resultado:
+------------+--------------+ | Compressed | Uncompressed | +------------+--------------+ | 16 | 50 | +------------+--------------+
Longitud de bytes frente a longitud de caracteres
El UNCOMPRESSED_LENGTH()
informa sobre la longitud en bytes (a diferencia de solo la longitud del carácter).
Podemos probar esto usando un carácter de varios bytes, como el símbolo de copyright (©
), luego pasándolo a funciones como LENGTH()
para obtener la longitud en bytes, y CHAR_LENGTH()
para obtener la longitud del carácter:
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 salida vertical):
UNCOMPRESSED_LENGTH(): 100 Uncompressed (Bytes): 100 Compressed (Bytes): 17 Uncompressed (Char): 50 Compressed (Char): 17
Aquí hay otro ejemplo que usa un carácter 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 salida vertical):
UNCOMPRESSED_LENGTH(): 150 Uncompressed (Bytes): 150 Compressed (Bytes): 18 Uncompressed (Char): 50 Compressed (Char): 18
Este carácter tailandés usa 3 bytes y, por lo tanto, terminamos con 150 bytes para la cadena sin comprimir, aunque la cadena solo tiene 50 caracteres.
Argumentos nulos
Pasando null
devuelve null
:
SELECT UNCOMPRESSED_LENGTH(null);
Resultado:
+---------------------------+ | UNCOMPRESSED_LENGTH(null) | +---------------------------+ | NULL | +---------------------------+
Argumento faltante
Llamando a UNCOMPRESSED_LENGTH()
con el número incorrecto de argumentos, o sin pasar ningún argumento da como resultado un error:
SELECT UNCOMPRESSED_LENGTH();
Resultado:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'UNCOMPRESSED_LENGTH'