ปัญหาและวิธีแก้
เมื่อต้องการจัดเก็บข้อมูลแบบไบนารี (Binary Data) ใน MySQL ควรใช้ Data Type BIT ซึ่งออกแบบมาโดยเฉพาะสำหรับค่า bit-field แต่การแสดงผลปกติจะไม่เห็นค่า ต้องใช้ฟังก์ชัน BIN() เพื่อแปลงแสดงเป็นสตริงไบนารี
ไวยากรณ์
BIT(M) -- M = จำนวนบิต (1-64)
ตัวอย่างการใช้งาน
1. สร้างตารางและเพิ่มข้อมูล
CREATE TABLE DemoTable (binaryValue BIT(5));
INSERT INTO DemoTable VALUES (10); -- 1010 ในไบนารี
INSERT INTO DemoTable VALUES (15); -- 1111 ในไบนารี
2. การ SELECT ปกติ (ไม่เห็นค่า)
SELECT * FROM DemoTable;
+-------------+
| binaryValue |
+-------------+
| |
| |
+-------------+
3. ใช้ BIN() เพื่อแสดงค่าไบนารี
SELECT BIN(binaryValue) FROM DemoTable;
+------------------+
| BIN(binaryValue) |
+------------------+
| 1010 |
| 1111 |
+------------------+
การ Insert ด้วย Literal ไบนารี
สามารถใช้สัญลักษณ์ b'...' เพื่อระบุค่าไบนารีโดยตรง
INSERT INTO DemoTable VALUES (b'1010'), (b'1111');
SELECT BIN(binaryValue) FROM DemoTable;
+------------------+
| BIN(binaryValue) |
+------------------+
| 1010 |
| 1111 |
| 1010 |
| 1111 |
+------------------+
Data Type อื่นที่เกี่ยวข้อง
| Data Type | ใช้สำหรับ | ขนาดสูงสุด |
|---|---|---|
| BIT(M) | Bit-field values | 64 bits |
| BINARY(M) | Fixed-length binary strings | 255 bytes |
| VARBINARY(M) | Variable-length binary strings | 65,535 bytes |
| BLOB | Large binary objects | 65KB - 4GB |
ข้อแนะนำ
- ใช้
BITสำหรับค่า Flag, Bitmask, หรือค่าที่เป็นบิตเดี่ยว - ใช้
VARBINARYหรือBLOBสำหรับไฟล์ภาพ, เอกสาร, หรือข้อมูลไบนารีขนาดใหญ่ - จำได้ว่า
SELECT *จะไม่แสดงค่า BIT ต้องใช้BIN(),HEX(), หรือCAST(... AS UNSIGNED)