В 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'