MariaDB
 sql >> Base de Dados >  >> RDS >> MariaDB

Como UNCOMPRESSED_LENGTH() funciona no MariaDB


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'