MariaDB
 sql >> Datenbank >  >> RDS >> MariaDB

Wie UNCOMPRESSED_LENGTH() in MariaDB funktioniert

In MariaDB UNCOMPRESSED_LENGTH() ist eine eingebaute Funktion, die die Länge einer komprimierten Zeichenfolge zurückgibt, bevor sie mit COMPRESS() komprimiert wurde Funktion.

Syntax

Die Syntax sieht so aus:

UNCOMPRESSED_LENGTH(compressed_string) 

Wo compressed_string ist die komprimierte Zeichenfolge.

Beispiel

Hier ist ein einfaches Beispiel:

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

Ergebnis:

+---------------------------------------------- --+| UNKOMPRIMIERTE_LÄNGE(KOMPRIMIEREN(REPEAT('z', 50))) |+---------------------------------------------- --------------+| 50 |+------------------------------------------------------------ -+

Hier habe ich den REPEAT() verwendet Funktion, denselben Buchstaben 50 Mal zu wiederholen. Das Wiederholen des Zeichens macht es zu einem guten Kandidaten für die Komprimierung.

Im Vergleich zum komprimierten String

Hier nochmal im Vergleich zum komprimierten String:

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

Ergebnis:

+------------+-------------+| Komprimiert | Unkomprimiert |+-----------+-------------+| 16 | 50 |+------------+--------------+

Bytelänge vs. Zeichenlänge

Die UNCOMPRESSED_LENGTH() gibt die Länge in Bytes an (im Gegensatz zu nur Zeichenlänge).

Wir können dies testen, indem wir ein Multibyte-Zeichen wie das Copyright-Symbol (© ) und dann an Funktionen wie LENGTH() übergeben um die Länge in Bytes zu erhalten, und CHAR_LENGTH() um die Zeichenlänge zu erhalten:

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

Ergebnis (bei vertikaler Ausgabe):

UNCOMPRESSED_LENGTH():100 Unkomprimiert (Bytes):100 Komprimiert (Bytes):17 Unkomprimiert (Zeichen):50 Komprimiert (Zeichen):17

Hier ist ein weiteres Beispiel, das ein thailändisches Zeichen verwendet:

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

Ergebnis (bei vertikaler Ausgabe):

UNCOMPRESSED_LENGTH():150 Unkomprimiert (Bytes):150 Komprimiert (Bytes):18 Unkomprimiert (Zeichen):50 Komprimiert (Zeichen):18

Dieses thailändische Zeichen verwendet 3 Bytes, und daher erhalten wir am Ende 150 Bytes für die unkomprimierte Zeichenfolge, obwohl die Zeichenfolge nur 50 Zeichen lang ist.

Null-Argumente

Übergabe von null gibt null zurück :

SELECT UNCOMPRESSED_LENGTH(null); 

Ergebnis:

+-----------------------------------+| UNKOMPRIMIERTE_LÄNGE(null) |+-----------------------------------+| NULL |+-----------------------------------+

Fehlendes Argument

Aufruf von UNCOMPRESSED_LENGTH() mit der falschen Anzahl von Argumenten oder ohne Übergabe von Argumenten führt zu einem Fehler:

SELECT UNCOMPRESSED_LENGTH(); 

Ergebnis:

FEHLER 1582 (42000):Falsche Parameteranzahl im Aufruf der nativen Funktion 'UNCOMPRESSED_LENGTH'