sql >> Database teknologi >  >> RDS >> MariaDB

Sådan fungerer UNCOMPRESSED_LENGTH() i MariaDB

I MariaDB, UNCOMPRESSED_LENGTH() er en indbygget funktion, der returnerer længden af ​​en komprimeret streng, før den blev komprimeret med COMPRESS() funktion.

Syntaks

Syntaksen ser sådan ud:

UNCOMPRESSED_LENGTH(compressed_string)

Hvor compressed_string er den komprimerede streng.

Eksempel

Her er et grundlæggende eksempel:

SELECT UNCOMPRESSED_LENGTH(COMPRESS(REPEAT('z', 50)));

Resultat:

+------------------------------------------------+
| UNCOMPRESSED_LENGTH(COMPRESS(REPEAT('z', 50))) |
+------------------------------------------------+
|                                             50 |
+------------------------------------------------+

Her brugte jeg REPEAT() funktion for at gentage det samme bogstav 50 gange. Gentagelse af karakteren gør den til en god kandidat til komprimering.

Sammenlignet med den komprimerede streng

Her er den igen, sammenlignet med den komprimerede streng:

SELECT
    LENGTH(COMPRESS(REPEAT('z', 50))) AS "Compressed",
    UNCOMPRESSED_LENGTH(COMPRESS(REPEAT('z', 50))) AS "Uncompressed";

Resultat:

+------------+--------------+
| Compressed | Uncompressed |
+------------+--------------+
|         16 |           50 |
+------------+--------------+

Bytelængde vs tegnlængde

UNCOMPRESSED_LENGTH() rapporterer om længden i bytes (i modsætning til blot tegnlængde).

Vi kan teste dette ved at bruge et multi-byte-tegn, såsom copyright-symbolet (© ), og derefter videregive den til funktioner såsom LENGTH() for at få længden i bytes, og CHAR_LENGTH() for at få tegnlængden:

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)";

Resultat (ved hjælp af lodret output):

UNCOMPRESSED_LENGTH(): 100
 Uncompressed (Bytes): 100
   Compressed (Bytes): 17
  Uncompressed (Char): 50
    Compressed (Char): 17

Her er et andet eksempel, der bruger et thailandsk tegn:

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)";

Resultat (ved hjælp af lodret output):

UNCOMPRESSED_LENGTH(): 150
 Uncompressed (Bytes): 150
   Compressed (Bytes): 18
  Uncompressed (Char): 50
    Compressed (Char): 18

Dette thailandske tegn bruger 3 bytes, og derfor ender vi med 150 bytes for den ukomprimerede streng, selvom strengen kun er 50 tegn lang.

Nul-argumenter

Sender null returnerer null :

SELECT UNCOMPRESSED_LENGTH(null);

Resultat:

+---------------------------+
| UNCOMPRESSED_LENGTH(null) |
+---------------------------+
|                      NULL |
+---------------------------+

Manglende argument

Kalder UNCOMPRESSED_LENGTH() med det forkerte antal argumenter, eller uden at sende nogen argumenter, resulterer det i en fejl:

SELECT UNCOMPRESSED_LENGTH();

Resultat:

ERROR 1582 (42000): Incorrect parameter count in the call to native function 'UNCOMPRESSED_LENGTH'

  1. Hvordan kommer du til grænser på 8060 bytes pr. række og 8000 pr. (varchar, nvarchar) værdi?

  2. Sådan indlæses JDBC-konfiguration fra Egenskabsfil Eksempel

  3. Er der en SQLite svarende til MySQL's DESCRIBE [tabel]?

  4. Oracle til PostgreSQL — Markører og ltræer