ภาพรวม
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 | ขนาดสูงสุด | ใช้เมื่อไหร่ |
|---|---|---|
| TINYBLOB | 255 bytes | ไฟล์เล็กมาก (Icon, Config) |
| BLOB | 64 KB | ทั่วไป |
| MEDIUMBLOB | 16 MB | รูปภาพ, เอกสารเล็ก |
| LONGBLOB | 4 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 จริงที่จัดเก็บ