Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

Query ความยาวข้อมูลในคอลัมน์ BLOB ด้วย LENGTH() ใน MySQL

ภาพรวม

Data Type BLOB (Binary Large Object) ใช้เก็บข้อมูลไบนารี ขนาดใหญ่ การหาความยาว (จำนวน Byte) ใช้ฟังก์ชัน LENGTH() ไม่ใช่ CHAR_LENGTH() (นับตัวอักษร)

ตัวอย่างสมบูรณ์

1. สร้างตาราง BLOB

CREATE TABLE DemoTable (Title BLOB);

2. เพิ่มข้อมูล (ข้อความปกติ แต่เก็บใน BLOB)

INSERT INTO DemoTable VALUES ('This is a MySQL tutorial');
INSERT INTO DemoTable VALUES ('Java is an object oriented programming language');
INSERT INTO DemoTable VALUES ('C is a procedural language');

3. ดูข้อมูล (แสดงเป็นข้อความ)

SELECT * FROM DemoTable;
+-------------------------------------------------+
| Title                                           |
+-------------------------------------------------+
| This is a MySQL tutorial                        |
| Java is an object oriented programming language |
| C is a procedural language                      |
+-------------------------------------------------+

4. หาความยาวด้วย LENGTH()

SELECT LENGTH(Title) FROM DemoTable;
+---------------+
| LENGTH(Title) |
+---------------+
| 24            |
| 47            |
| 26            |
+---------------+

LENGTH() vs CHAR_LENGTH()

ฟังก์ชันนับเหมาะสำหรับ
LENGTH()Byte (ไบต์)BLOB, VARBINARY, Binary strings
CHAR_LENGTH() / CHARACTER_LENGTH()Character (ตัวอักษร)VARCHAR, TEXT, Non-binary strings

ตัวอย่างเปรียบเทียบ (UTF-8)

SELECT 
    LENGTH('ไทย') AS byte_length,      -- 9 bytes (3 ตัวอักษร × 3 bytes)
    CHAR_LENGTH('ไทย') AS char_length;  -- 3 characters
+-------------+--------------+
| byte_length | char_length  |
+-------------+--------------+
| 9           | 3            |
+-------------+--------------+

Data Type กลุ่ม BLOB

Typeขนาดสูงสุดใช้เมื่อไหร่
TINYBLOB255 bytesไฟล์เล็กมาก (Icon, Config)
BLOB64 KBทั่วไป
MEDIUMBLOB16 MBรูปภาพ, เอกสารเล็ก
LONGBLOB4 GBวิดีโอ, ไฟล์ใหญ่

การใช้งานจริง

-- หาไฟล์ที่ใหญ่กว่า 1MB
SELECT * FROM Documents WHERE LENGTH(file_data) > 1048576;

-- สรุปขนาดไฟล์เฉลี่ย
SELECT AVG(LENGTH(file_data)) AS avg_size_bytes FROM Documents;

-- นับจำนวนไฟล์ตามช่วงขนาด
SELECT 
    CASE 
        WHEN LENGTH(file_data) < 1024 THEN '< 1KB'
        WHEN LENGTH(file_data) < 1048576 THEN '1KB - 1MB'
        ELSE '> 1MB'
    END AS size_range,
    COUNT(*) AS file_count
FROM Documents
GROUP BY size_range;

สรุป

ใช้ LENGTH() เพื่อหาขนาด Byte ของคอลัมน์ BLOB ให้ค่าจำนวน Byte จริงที่จัดเก็บ