MariaDB
 sql >> Baza danych >  >> RDS >> MariaDB

Jak działa UNCOMPRESSED_LENGTH() w MariaDB

W MariaDB, UNCOMPRESSED_LENGTH() to wbudowana funkcja, która zwraca długość skompresowanego ciągu znaków przed jego skompresowaniem za pomocą COMPRESS() funkcja.

Składnia

Składnia wygląda tak:

UNCOMPRESSED_LENGTH(compressed_string)

Gdzie compressed_string to skompresowany ciąg.

Przykład

Oto podstawowy przykład:

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

Wynik:

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

Tutaj użyłem funkcji REPEAT() funkcja powtarzania tej samej litery 50 razy. Powtarzanie znaku czyni go dobrym kandydatem do kompresji.

W porównaniu ze skompresowanym ciągiem

Oto znowu, w porównaniu do skompresowanego ciągu:

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

Wynik:

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

Długość w bajtach a długość znaków

UNCOMPRESSED_LENGTH() raporty o długości w bajtach (w przeciwieństwie do długości znaków).

Możemy to przetestować, używając znaku wielobajtowego, takiego jak symbol praw autorskich (© ), a następnie przekazanie go do funkcji takich jak LENGTH() aby uzyskać długość w bajtach i CHAR_LENGTH() aby uzyskać długość znaków:

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

Wynik (przy użyciu wyjścia pionowego):

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

Oto kolejny przykład, w którym użyto znaku tajskiego:

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

Wynik (przy użyciu wyjścia pionowego):

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

Ten znak tajski używa 3 bajtów i dlatego otrzymujemy 150 bajtów na nieskompresowany ciąg, mimo że ciąg ma tylko 50 znaków.

Argumenty zerowe

Przekazywanie null zwraca null :

SELECT UNCOMPRESSED_LENGTH(null);

Wynik:

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

Brakujący argument

Wywołanie UNCOMPRESSED_LENGTH() z niewłaściwą liczbą argumentów lub bez przekazania jakichkolwiek argumentów powoduje błąd:

SELECT UNCOMPRESSED_LENGTH();

Wynik:

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

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MariaDB JSON_DETAILED() Objaśnienie

  2. Jak działa PRAWO() w MariaDB

  3. Analityka z MariaDB AX - tThe Open Source Columnar Datastore

  4. Skalowanie bazy danych Moodle

  5. Jak zidentyfikować problemy z wydajnością MySQL za pomocą powolnych zapytań