UNSIGNED คืออะไร?
UNSIGNED เป็น Attribute ของชนิดตัวเลข (INT, BIGINT, ทศนิยม) ที่บังคับให้เก็บ เฉพาะค่าบวกและศูนย์ ไม่ยอมรับค่าลบ
ช่วงค่าเปรียบเทียบ (INT)
| Type | Signed (ปกติ) | Unsigned |
|---|---|---|
| INT | -2,147,483,648 ถึง 2,147,483,647 | 0 ถึง 4,294,967,295 |
ตัวอย่าง
สร้างตาราง UNSIGNED
mysql> create table UnsignedDemoWithPositiveValue (
-> Distance int unsigned
-> );
Query OK, 0 rows affected (0.86 sec)
ทดสอบค่าที่เกินช่วง (4294967296)
mysql> insert into UnsignedDemoWithPositiveValue values(4294967296); ERROR 1264 (22003): Out of range value for column 'Distance' at row 1
ทดสอบค่าสูงสุด (4294967295)
mysql> insert into UnsignedDemoWithPositiveValue values(4294967295); Query OK, 1 row affected (0.30 sec)
ทดสอบค่าลบ (-124)
mysql> insert into UnsignedDemoWithPositiveValue values(-124); ERROR 1264 (22003): Out of range value for column 'Distance' at row 1
ทดสอบค่าบวกปกติ (124)
mysql> insert into UnsignedDemoWithPositiveValue values(124); Query OK, 1 row affected (0.86 sec)
แสดงผล
mysql> select * from UnsignedDemoWithPositiveValue;
+------------+ | Distance | +------------+ | 4294967295 | | 124 | +------------+ 2 rows in set (0.00 sec)
เมื่อไหร่ควรใช้ UNSIGNED?
- ค่าที่ไม่มีโอกาสเป็นลบ: อายุ, ราคา, จำนวน, ระยะทาง, ID
- ต้องการช่วงค่าบวกมากขึ้น 2 เท่า (ไม่ต้องไปใช้ BIGINT)
- เพื่อความชัดเจนของ Domain Logic
ข้อควรระวัง: การคำนวณระหว่าง UNSIGNED และ SIGNED อาจให้ผลลัพธ์ไม่คาดคิด ควรใช้ชนิดเดียวกันทั่วทั้งแอปพลิเคชัน