Trong MariaDB, UNCOMPRESSED_LENGTH()
là một hàm tích hợp trả về độ dài của một chuỗi được nén trước khi nó được nén bằng COMPRESS()
chức năng.
Cú pháp
Cú pháp như sau:
UNCOMPRESSED_LENGTH(compressed_string)
Trong đó compressed_string
là chuỗi nén.
Ví dụ
Đây là một ví dụ cơ bản:
SELECT UNCOMPRESSED_LENGTH(COMPRESS(REPEAT('z', 50)));
Kết quả:
+------------------------------------------------+ | UNCOMPRESSED_LENGTH(COMPRESS(REPEAT('z', 50))) | +------------------------------------------------+ | 50 | +------------------------------------------------+
Ở đây, tôi đã sử dụng REPEAT()
chức năng lặp lại cùng một chữ cái 50 lần. Việc lặp lại ký tự khiến nó trở thành một ứng cử viên tốt để nén.
So với chuỗi nén
Đây là một lần nữa, được so sánh với chuỗi nén:
SELECT
LENGTH(COMPRESS(REPEAT('z', 50))) AS "Compressed",
UNCOMPRESSED_LENGTH(COMPRESS(REPEAT('z', 50))) AS "Uncompressed";
Kết quả:
+------------+--------------+ | Compressed | Uncompressed | +------------+--------------+ | 16 | 50 | +------------+--------------+
Độ dài byte so với Độ dài ký tự
UNCOMPRESSED_LENGTH()
báo cáo về độ dài tính bằng byte (trái ngược với chỉ độ dài ký tự).
Chúng tôi có thể kiểm tra điều này bằng cách sử dụng một ký tự nhiều byte, chẳng hạn như ký hiệu bản quyền (©
), sau đó chuyển nó đến các hàm như LENGTH()
để lấy độ dài tính bằng byte và CHAR_LENGTH()
để lấy độ dài ký tự:
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)";
Kết quả (sử dụng đầu ra dọc):
UNCOMPRESSED_LENGTH(): 100 Uncompressed (Bytes): 100 Compressed (Bytes): 17 Uncompressed (Char): 50 Compressed (Char): 17
Dưới đây là một ví dụ khác sử dụng ký tự tiếng Thái:
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)";
Kết quả (sử dụng đầu ra dọc):
UNCOMPRESSED_LENGTH(): 150 Uncompressed (Bytes): 150 Compressed (Bytes): 18 Uncompressed (Char): 50 Compressed (Char): 18
Ký tự tiếng Thái này sử dụng 3 byte và do đó chúng tôi kết thúc bằng 150 byte cho chuỗi không nén, mặc dù chuỗi chỉ dài 50 ký tự.
Đối số rỗng
Chuyển null
trả về null
:
SELECT UNCOMPRESSED_LENGTH(null);
Kết quả:
+---------------------------+ | UNCOMPRESSED_LENGTH(null) | +---------------------------+ | NULL | +---------------------------+
Thiếu đối số
Đang gọi UNCOMPRESSED_LENGTH()
với số lượng đối số sai hoặc không chuyển bất kỳ đối số nào dẫn đến lỗi:
SELECT UNCOMPRESSED_LENGTH();
Kết quả:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'UNCOMPRESSED_LENGTH'