ความเข้าใจผิดทั่วไป
หลายคนเข้าใจผิดว่าตัวเลขในวงเล็บ int(5) หรือ int(10) กำหนด ขนาดสูงสุดของตัวเลข แต่จริงๆ แล้ว ไม่ใช่ ค่าที่เก็บได้สูงสุดของ INT เสมอเป็น 2,147,483,647 (signed) หรือ 4,294,967,295 (unsigned)
ความหมายจริงของตัวเลขในวงเล็บ
ตัวเลขในวงเล็บหมายถึง Display Width (ความกว้างในการแสดงผล) ใช้ร่วมกับ ZEROFILL เท่านั้น
ตัวอย่างแสดงผลกับ ZEROFILL
สร้างตารางทดสอบ
CREATE TABLE intVsIntAnyThingDemo (
Number1 INT(11) UNSIGNED ZEROFILL,
Number2 INT(13) UNSIGNED ZEROFILL
);
เพิ่มข้อมูล
INSERT INTO intVsIntAnyThingDemo VALUES
(12345, 6789),
(3, 2),
(12, 89),
(123, 6789),
(1234, 6789);
ผลลัพธ์การแสดงผล
| Number1 (INT(11)) | Number2 (INT(13)) |
|---|---|
| 00000012345 | 0000000006789 |
| 00000000003 | 0000000000002 |
| 00000000012 | 0000000000089 |
| 00000000123 | 0000000006789 |
| 00000001234 | 0000000006789 |
สรุปความแตกต่าง
| คุณสมบัติ | INT(5) | INT(10) |
|---|---|---|
| ขนาดเก็บข้อมูล | 4 ไบต์ | 4 ไบต์ |
| ค่าสูงสุด (Signed) | 2,147,483,647 | 2,147,483,647 |
| ค่าสูงสุด (Unsigned) | 4,294,967,295 | 4,294,967,295 |
| ความกว้างแสดงผล (ZEROFILL) | 5 หลัก | 10 หลัก |
ข้อสังเกต
- MySQL 8.0.17+ แสดงคำเตือนว่า ZEROFILL และ Display Width จะถูกนำออกในอนาคต
- แนะนำให้จัดรูปแบบการแสดงผลที่ Application Layer แทน
- ใช้
UNSIGNEDหากไม่ต้องการค่าลบ (เพิ่มช่วงค่าบวกเป็น 2 เท่า)