sql >> Databasteknik >  >> RDS >> MariaDB

Hur UNCOMPRESSED_LENGTH() fungerar i MariaDB

I MariaDB, UNCOMPRESSED_LENGTH() är en inbyggd funktion som returnerar längden på en komprimerad sträng innan den komprimerades med COMPRESS() funktion.

Syntax

Syntaxen ser ut så här:

UNCOMPRESSED_LENGTH(compressed_string)

Där compressed_string är den komprimerade strängen.

Exempel

Här är ett grundläggande exempel:

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

Resultat:

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

Här använde jag REPEAT() funktion för att upprepa samma bokstav 50 gånger. Att upprepa karaktären gör det till en bra kandidat för komprimering.

Jämfört med den komprimerade strängen

Här är den igen, jämfört med den komprimerade strängen:

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

Resultat:

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

Bytelängd kontra teckenlängd

UNCOMPRESSED_LENGTH() rapporterar om längden i byte (i motsats till bara teckenlängd).

Vi kan testa detta genom att använda ett multi-byte-tecken, till exempel copyright-symbolen (© ), skickar den sedan till funktioner som LENGTH() för att få längden i byte och CHAR_LENGTH() för att få teckenlä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 (med vertikal utdata):

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

Här är ett annat exempel som använder ett thailändskt tecken:

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 (med vertikal utdata):

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

Detta thailändska tecken använder 3 byte, och därför slutar vi med 150 byte för den okomprimerade strängen, även om strängen bara är 50 tecken lång.

Nollargument

Skickar null returnerar null :

SELECT UNCOMPRESSED_LENGTH(null);

Resultat:

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

Argument saknas

Anropar UNCOMPRESSED_LENGTH() med fel antal argument, eller utan att skicka några argument resulterar i ett fel:

SELECT UNCOMPRESSED_LENGTH();

Resultat:

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

  1. Hur får man nästa/föregående rekord i MySQL?

  2. JSON_QUERY() Exempel i SQL Server (T-SQL)

  3. Postgres FEL:kunde inte öppna filen för läsning:Tillstånd nekad

  4. Uppdatera ditt PostgreSQL-lösenord i Linux