ใช้ DOUBLE(M, D) UNSIGNED เพื่อกำหนดความแม่นยำ (Precision) และสเกล (Scale) ของตัวเลขทศนิยม พร้อมจำกัดให้เป็นค่าบวกเท่านั้น
ไวยากรณ์
CREATE TABLE table_name (
column_name DOUBLE(M, D) [UNSIGNED] [ZEROFILL]
);
M(Precision): จำนวนตัวเลขทั้งหมด (รวมทั้งด้านซ้ายและขวาจุดทศนิยม) Max 255D(Scale): จำนวนตัวเลขหลังจุดทศนิยม Max 30, ต้อง ≤ MUNSIGNED: ไม่อนุญาตค่าติดลบ (0 ถึงค่าบวกสูงสุด)ZEROFILL: เติม 0 นำหน้า (Implicit UNSIGNED)
ตัวอย่างการใช้งาน
1. สร้างตาราง DOUBLE(5,2) UNSIGNED
mysql> CREATE TABLE DemoTable1814 (
Amount DOUBLE(5,2) UNSIGNED
);
Query OK, 0 rows affected (0.00 sec)
ความหมาย: ทั้งหมด 5 ตัวเลข, 2 ตำแหน่งทศนิยม → ด้านซ้ายจุดได้ 3 ตัว (0-999.99)
2. เพิ่มข้อมูล
mysql> INSERT INTO DemoTable1814 VALUES(1.98); mysql> INSERT INTO DemoTable1814 VALUES(100.24); mysql> INSERT INTO DemoTable1814 VALUES(198.50);
3. แสดงข้อมูล
mysql> SELECT * FROM DemoTable1814; +--------+ | Amount | +--------+ | 1.98 | | 100.24 | | 198.50 | +--------+
ทดสอบขอบเขต (Boundary Test)
mysql> INSERT INTO DemoTable1814 VALUES(999.99); -- ✅ Max: 999.99 mysql> INSERT INTO DemoTable1814 VALUES(1000.00); -- ❌ Error: Out of range mysql> INSERT INTO DemoTable1814 VALUES(-1.00); -- ❌ Error: UNSIGNED ไม่รับค่าติดลบ
DOUBLE vs DECIMAL
| คุณสมบัติ | DOUBLE(M,D) | DECIMAL(M,D) |
|---|---|---|
| การจัดเก็บ | 8 Bytes (Floating Point) | Variable (~M/2 Bytes) (Fixed Point) |
| ความแม่นยำ | ประมาณ 15-17 Significant Digits | แม่นยำสมบูรณ์ (Exact) |
| เหมาะสำหรับ | วิทยาศาสตร์, วิศวกรรม, ค่าที่ยอมรับความคลาดเคลื่อนได้ | เงิน, บัญชี, การคำนวณทางการเงิน |
| Rounding | อาจมี Rounding Error | ไม่มี Rounding Error |
แนะนำ: ใช้ DECIMAL สำหรับเงิน/การเงิน
CREATE TABLE finance (
amount DECIMAL(12,2) NOT NULL -- รองรับถึง 999,999,999.99
);
สรุป
DOUBLE(5,2) UNSIGNED กำหนดได้สูงสุด 999.99 ไม่รับค่าติดลบ ใช้สำหรับค่าที่ยอมรับ Precision ประมาณการได้ สำหรับเงิน/บัญชี ต้องใช้ DECIMAL เท่านั้น