MariaDB
 sql >> база данни >  >> RDS >> MariaDB

Как работи UNCOMPRESSED_LENGTH() в MariaDB

В MariaDB, UNCOMPRESSED_LENGTH() е вградена функция, която връща дължината на компресиран низ, преди да бъде компресиран с COMPRESS() функция.

Синтаксис

Синтаксисът е така:

UNCOMPRESSED_LENGTH(compressed_string)

Където compressed_string е компресираният низ.

Пример

Ето един основен пример:

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

Резултат:

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

Тук използвах REPEAT() функция за повтаряне на една и съща буква 50 пъти. Повтарянето на символа го прави добър кандидат за компресиране.

В сравнение с компресирания низ

Ето го отново в сравнение с компресирания низ:

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

Резултат:

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

Дължина на байт спрямо дължина на символа

UNCOMPRESSED_LENGTH() отчита дължината в байтове (за разлика от само дължината на символа).

Можем да тестваме това, като използваме многобайтов знак, като символа за авторско право (© ), след което го предава на функции като LENGTH() за да получите дължината в байтове и CHAR_LENGTH() за да получите дължината на символа:

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

Резултат (с помощта на вертикален изход):

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

Ето още един пример, който използва тайландски знак:

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

Резултат (с помощта на вертикален изход):

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

Този тайландски знак използва 3 байта и затова в крайна сметка получаваме 150 байта за некомпресирания низ, въпреки че низът е дълъг само 50 знака.

Нулеви аргументи

Предаването на null връща null :

SELECT UNCOMPRESSED_LENGTH(null);

Резултат:

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

Липсващ аргумент

Извикване на UNCOMPRESSED_LENGTH() с грешен брой аргументи или без подаване на аргументи води до грешка:

SELECT UNCOMPRESSED_LENGTH();

Резултат:

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. Как да шифровате вашите MySQL и MariaDB архиви

  2. MariaDB CURRENT_TIMESTAMP() Обяснено

  3. MariaDB Backup &PostgreSQL в облака - ClusterControl Издание 1.6.1

  4. Оптимизация на MySQL Storage Engine:Конфигуриране на InnoDB оптимизация за висока производителност

  5. Как ATAN2() работи в MariaDB