BIT เก็บได้ 1 บิต (0 หรือ 1) เท่านั้น ส่วน TINYINT เก็บได้ 8 บิต (-128 ถึง 127 สำหรับ SIGNED, 0-255 สำหรับ UNSIGNED)
BIT Type
mysql> CREATE TABLE BitDemo (Id BIT); mysql> INSERT INTO BitDemo VALUES (1), (0); -- OK mysql> INSERT INTO BitDemo VALUES (2); -- ERROR 1406: Data too long
TINYINT Type
mysql> CREATE TABLE TinyIntDemo (Id TINYINT); mysql> INSERT INTO TinyIntDemo VALUES (123), (97), (127); -- OK mysql> INSERT INTO TinyIntDemo VALUES (128); -- ERROR 1264: Out of range (SIGNED max 127) mysql> INSERT INTO TinyIntDemo VALUES (255); -- ERROR 1264 (SIGNED)
ถ้าใช้ TINYINT UNSIGNED จะเก็บได้ 0-255
ตารางเปรียบเทียบ
| คุณสมบัติ | BIT | TINYINT (SIGNED) | TINYINT UNSIGNED |
|---|---|---|---|
| จำนวนบิต | 1 | 8 | 8 |
| ช่วงค่า | 0-1 | -128 ถึง 127 | 0 ถึง 255 |
| พื้นที่จัดเก็บ | ~1 ไบต์ | 1 ไบต์ | 1 ไบต์ |
| ใช้สำหรับ | Flag เดียว, Bitmask | ตัวเลขเล็ก, Flag หลายตัว | ตัวเลขเล็กไม่ติดลบ |
หมายเหตุ: BIT(M) สามารถกำหนดจำนวนบิตได้สูงสุด 64 บิต แต่ใน MySQL จะจัดเก็บเป็น byte แบบปัดขึ้น (BIT(1-8) = 1 byte, BIT(9-16) = 2 bytes, ...)