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

MySQL ไม่บันทึกข้อมูลไบนารีได้ถูกต้อง? ควรใช้ Data Type อะไร?

ปัญหาและวิธีแก้

เมื่อต้องการจัดเก็บข้อมูลแบบไบนารี (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 values64 bits
BINARY(M)Fixed-length binary strings255 bytes
VARBINARY(M)Variable-length binary strings65,535 bytes
BLOBLarge binary objects65KB - 4GB

ข้อแนะนำ

  • ใช้ BIT สำหรับค่า Flag, Bitmask, หรือค่าที่เป็นบิตเดี่ยว
  • ใช้ VARBINARY หรือ BLOB สำหรับไฟล์ภาพ, เอกสาร, หรือข้อมูลไบนารีขนาดใหญ่
  • จำได้ว่า SELECT * จะไม่แสดงค่า BIT ต้องใช้ BIN(), HEX(), หรือ CAST(... AS UNSIGNED)