sql >> Base de Datos >  >> RDS >> MariaDB

Cómo funciona UNCOMPRESSED_LENGTH() en MariaDB

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'