sql >> Database >  >> RDS >> MariaDB

Hoe UNCOMPRESSED_LENGTH() werkt in MariaDB

In MariaDB, UNCOMPRESSED_LENGTH() is een ingebouwde functie die de lengte van een gecomprimeerde tekenreeks retourneert voordat deze werd gecomprimeerd met de COMPRESS() functie.

Syntaxis

De syntaxis gaat als volgt:

UNCOMPRESSED_LENGTH(compressed_string)

Waar compressed_string is de gecomprimeerde tekenreeks.

Voorbeeld

Hier is een eenvoudig voorbeeld:

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

Resultaat:

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

Hier gebruikte ik de REPEAT() functie om dezelfde letter 50 keer te herhalen. Door het karakter te herhalen is het een goede kandidaat voor compressie.

Vergeleken met de gecomprimeerde string

Hier is het weer, vergeleken met de gecomprimeerde string:

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

Resultaat:

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

Bytelengte versus tekenlengte

De UNCOMPRESSED_LENGTH() rapporteert over de lengte in bytes (in tegenstelling tot alleen tekenlengte).

We kunnen dit testen door een multi-byte teken te gebruiken, zoals het copyright-symbool (© ), en geef het vervolgens door aan functies zoals LENGTH() om de lengte in bytes te krijgen, en CHAR_LENGTH() om de tekenlengte te krijgen:

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

Resultaat (met verticale uitvoer):

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

Hier is nog een voorbeeld dat een Thais karakter gebruikt:

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

Resultaat (met verticale uitvoer):

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

Dit Thaise karakter gebruikt 3 bytes, en daarom eindigen we met 150 bytes voor de ongecomprimeerde string, ook al is de string maar 50 karakters lang.

Nullargumenten

Doorgeven van null retourneert null :

SELECT UNCOMPRESSED_LENGTH(null);

Resultaat:

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

Ontbrekend argument

Aanroepen van UNCOMPRESSED_LENGTH() met het verkeerde aantal argumenten, of zonder het doorgeven van argumenten resulteert in een fout:

SELECT UNCOMPRESSED_LENGTH();

Resultaat:

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

  1. 2 manieren om alle door de gebruiker gedefinieerde functies in een SQL Server-database te retourneren

  2. Waarom gebruikt Postgres de index niet?

  3. Hulpprogramma voor clusterverificatie dat een groot aantal xml-bestanden genereert op het bestandssysteem "/u01".

  4. Wat te doen met null-waarden bij het modelleren en normaliseren?