ทำไมต้องใช้ DECIMAL สำหรับราคา
DECIMAL เป็นชนิดข้อมูลที่จัดเก็บค่าทศนิยมได้ แม่นยำ (Exact Precision) ไม่มีปัญหาการปัดเศษแบบ Floating Point (FLOAT/DOUBLE)
รูปแบบที่แนะนำ: DECIMAL(10,2)
10= จำนวนหลักทั้งหมด (Precision)2= จำนวนหลักหลังจุดทศนิยม (Scale)- รองรับค่าสูงสุด: 99,999,999.99 (เกือบ 100 ล้าน)
ตัวอย่างการใช้งาน
สร้างตาราง
CREATE TABLE PriceDemo (ProductPrice DECIMAL(10,2));
เพิ่มข้อมูลราคาต่างๆ
INSERT INTO PriceDemo VALUES
(12345.67),
(99999999.67),
(123456.67),
(4444444.50);
ผลลัพธ์
+--------------+
| ProductPrice |
+--------------+
| 12345.67 |
| 99999999.67 |
| 123456.67 |
| 4444444.50 |
+--------------+
เปรียบเทียบชนิดข้อมูลตัวเลข
| Type | Storage | Precision | เหมาะสำหรับ |
|---|---|---|---|
| DECIMAL(10,2) | ~6 bytes | Exact | ราคา, เงิน, บัญชี |
| FLOAT | 4 bytes | Approximate (~7 digits) | ค่าวิทยาศาสตร์, พิกัด |
| DOUBLE | 8 bytes | Approximate (~15 digits) | ค่าวิทยาศาสตร์ที่ต้องการ Precision สูง |
| INT (เก็บสตางค์) | 4 bytes | Exact | ระบบที่ต้องการความเร็วสูงสุด (เก็บเป็นสตางค์) |
ปัญหาของ FLOAT/DOUBLE กับเงิน
SELECT 0.1 + 0.2; -- ผลลัพธ์: 0.30000000000000004 (ผิด!)
SELECT CAST(0.1 AS DECIMAL(10,2)) + CAST(0.2 AS DECIMAL(10,2)); -- ผลลัพธ์: 0.30 (ถูกต้อง)
สรุป: ใช้ DECIMAL(10,2) สำหรับราคาส่วนใหญ่ หากราคาสูงกว่า 100 ล้าน ให้เพิ่ม Precision เช่น DECIMAL(12,2) หรือ DECIMAL(15,2)