คำตอบสั้น
ค่าสูงสุดของ SMALLINT(6) UNSIGNED คือ 65,535
ตัวเลข (6) ไม่ได้กำหนดช่วงค่า มันเป็นแค่ Display Width สำหรับ ZEROFILL เท่านั้น
ช่วงค่าของ SMALLINT
| ประเภท | ค่าต่ำสุด | ค่าสูงสุด |
| SIGNED (Default) | -32,768 | 32,767 |
| UNSIGNED | 0 | 65,535 |
ตัวอย่างกับ ZEROFILL
สร้างตาราง
CREATE TABLE smallIntDemo (
FirstNumber SMALLINT(6) ZEROFILL
);
เพิ่มข้อมูลในช่วงที่ถูกต้อง
INSERT INTO smallIntDemo VALUES (2), (23), (234), (2345), (23456);
ลองเพิ่มเกินค่าสูงสุด (Error)
INSERT INTO smallIntDemo VALUES (234567); -- ERROR 1264: Out of range
INSERT INTO smallIntDemo VALUES (111111); -- ERROR 1264: Out of range
ผลลัพธ์การแสดงผล (ZEROFILL)
| FirstNumber (SMALLINT(6) ZEROFILL) |
| 000002 |
| 000023 |
| 000234 |
| 002345 |
| 023456 |
สรุปขนาด Integer Types ใน MySQL
| Type | Size (Bytes) | Signed Range | Unsigned Range |
| TINYINT | 1 | -128 ~ 127 | 0 ~ 255 |
| SMALLINT | 2 | -32,768 ~ 32,767 | 0 ~ 65,535 |
| MEDIUMINT | 3 | -8,388,608 ~ 8,388,607 | 0 ~ 16,777,215 |
| INT | 4 | -2,147,483,648 ~ 2,147,483,647 | 0 ~ 4,294,967,295 |
| BIGINT | 8 | -9.22e18 ~ 9.22e18 | 0 ~ 1.84e19 |
ข้อสังเกต
- MySQL 8.0.17+ Deprecated Display Width และ ZEROFILL
- ใช้
CHECK CONSTRAINT สำหรับจำกัดช่วงค่าแทน (MySQL 8.0.16+)
- เลือก Type ให้พอดีกับข้อมูล เพื่อประหยัดพื้นที่และเพิ่มประสิทธิภาพ