ตัวเลขในวงเล็บของ TINYINT คือ Display Width ไม่ใช่ขนาดข้อมูล
สรุป: TINYINT(1) และ TINYINT(2) เหมือนกันทุกประการ ด้านขนาดการจัดเก็บ (1 byte) และช่วงค่า (-128 ถึง 127 หรือ 0 ถึง 255 UNSIGNED)
ตัวเลขในวงเล็บ ไม่ได้จำกัดค่าที่เก็บได้ แต่มีผลเฉพาะเมื่อใช้กับ ZEROFILL (เติมศูนย์หน้าตัวเลข)
ตัวอย่างสาธิตด้วย ZEROFILL
CREATE TABLE tinyIntDemo (
Number1 TINYINT(1) ZEROFILL,
Number2 TINYINT(2) ZEROFILL
);
INSERT INTO tinyIntDemo VALUES (1, 1);
SELECT * FROM tinyIntDemo;
ผลลัพธ์:
| Number1 | Number2 |
|---|---|
| 1 | 01 |
อธิบาย
TINYINT(1) ZEROFILL: แสดงผลกว้าง 1 ตัวอักษร →1TINYINT(2) ZEROFILL: แสดงผลกว้าง 2 ตัวอักษร →01(เติม 0 นำหน้า)
ข้อเท็จจริงเพิ่มเติม
- MySQL 8.0.17+ แสดง Warning ว่า ZEROFILL และ Display Width จะถูก Deprecated ในอนาคต
- ควรหลีกเลี่ยงการพึ่งพา Display Width ใน Application Logic
- หากต้องการจำกัดค่า ให้ใช้ CHECK CONSTRAINT หรือจัดการที่ Application Layer
สรุป: TINYINT(1) vs TINYINT(2) → ต่างกันแค่การแสดงผลเมื่อใช้ ZEROFILL เท่านั้น