Di MariaDB, UNCOMPRESSED_LENGTH()
adalah fungsi bawaan yang mengembalikan panjang string terkompresi sebelum dikompresi dengan COMPRESS()
fungsi.
Sintaks
Sintaksnya seperti ini:
UNCOMPRESSED_LENGTH(compressed_string)
Dimana compressed_string
adalah string terkompresi.
Contoh
Berikut ini contoh dasarnya:
SELECT UNCOMPRESSED_LENGTH(COMPRESS(REPEAT('z', 50)));
Hasil:
+------------------------------------------------+ | UNCOMPRESSED_LENGTH(COMPRESS(REPEAT('z', 50))) | +------------------------------------------------+ | 50 | +------------------------------------------------+
Di sini, saya menggunakan REPEAT()
berfungsi untuk mengulang huruf yang sama sebanyak 50 kali. Mengulangi karakter membuatnya menjadi kandidat yang baik untuk kompresi.
Dibandingkan dengan String Terkompresi
Ini dia lagi, dibandingkan dengan string terkompresi:
SELECT
LENGTH(COMPRESS(REPEAT('z', 50))) AS "Compressed",
UNCOMPRESSED_LENGTH(COMPRESS(REPEAT('z', 50))) AS "Uncompressed";
Hasil:
+------------+--------------+ | Compressed | Uncompressed | +------------+--------------+ | 16 | 50 | +------------+--------------+
Panjang Byte vs Panjang Karakter
UNCOMPRESSED_LENGTH()
melaporkan panjangnya dalam byte (bukan hanya panjang karakter).
Kita dapat mengujinya dengan menggunakan karakter multi-byte, seperti simbol hak cipta (©
), lalu meneruskannya ke fungsi seperti LENGTH()
untuk mendapatkan panjang dalam byte, dan CHAR_LENGTH()
untuk mendapatkan panjang karakter:
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)";
Hasil (menggunakan keluaran vertikal):
UNCOMPRESSED_LENGTH(): 100 Uncompressed (Bytes): 100 Compressed (Bytes): 17 Uncompressed (Char): 50 Compressed (Char): 17
Berikut contoh lain yang menggunakan karakter Thailand:
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)";
Hasil (menggunakan keluaran vertikal):
UNCOMPRESSED_LENGTH(): 150 Uncompressed (Bytes): 150 Compressed (Bytes): 18 Uncompressed (Char): 50 Compressed (Char): 18
Karakter Thai ini menggunakan 3 byte, dan oleh karena itu kita mendapatkan 150 byte untuk string yang tidak dikompresi, meskipun panjang string hanya 50 karakter.
Argumen Null
Melewati null
mengembalikan null
:
SELECT UNCOMPRESSED_LENGTH(null);
Hasil:
+---------------------------+ | UNCOMPRESSED_LENGTH(null) | +---------------------------+ | NULL | +---------------------------+
Argumen Tidak Ada
Memanggil UNCOMPRESSED_LENGTH()
dengan jumlah argumen yang salah, atau tanpa memberikan argumen apa pun menghasilkan kesalahan:
SELECT UNCOMPRESSED_LENGTH();
Hasil:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'UNCOMPRESSED_LENGTH'