ใช้ DECIMAL(10,2) สำหรับจำนวนเงินมาตรฐาน
PayPal และระบบชำระเงินส่วนใหญ่ใช้ทศนิยม 2 ตำแหน่ง (เซ็นต์/สตางค์) DECIMAL(10,2) รองรับได้สูงสุด 99,999,999.99 (ประมาณ 100 ล้าน) เพียงพอสำหรับธุรกรรมทั่วไป
โครงสร้าง DECIMAL(10,2)
- 10 = จำนวนหลักทั้งหมด (Precision)
- 2 = จำนวนหลักทศนิยม (Scale)
- รองรับ: -99,999,999.99 ถึง 99,999,999.99
ตัวอย่าง完整
mysql> CREATE TABLE DemoTable1491 (
-> Amount DECIMAL(10,2)
-> );
Query OK, 0 rows affected (0.66 sec)
mysql> INSERT INTO DemoTable1491 VALUES(987664.50), (18783874.90), (35363738.50);
Query OK, 3 rows affected
ผลลัพธ์
+-------------+ | Amount | +-------------+ | 987664.50 | | 18783874.90 | | 35363738.50 | +-------------+
แนวทางปฏิบัติที่ดี (Best Practices)
✅ ควรทำ
- ใช้
DECIMALสำหรับเงินทุกประเภท - กำหนด Scale = 2 สำหรับสกุลเงินส่วนใหญ่ (บาท, ดอลลาร์, ยูโร)
- ใช้
UNSIGNEDหากไม่มีค่าลบ:DECIMAL(10,2) UNSIGNED - จัดเก็บในหน่วยเล็กที่สุด (สตางค์/เซ็นต์) เป็น
BIGINTก็ได้ (เช่น 98766450 = 987,664.50 บาท)
❌ ห้ามทำ
- ใช้
FLOATหรือDOUBLEสำหรับเงิน (มีปัญหาการปัดเศษ Binary Floating Point) - ใช้
VARCHARเก็บเงิน (ยากต่อการคำนวณและเรียงลำดับ) - กำหนด Precision น้อยเกินไป (เช่น DECIMAL(5,2) รองรับได้แค่ 999.99)
ขยายขอบเขตสำหรับธุรกรรมใหญ่
-- รองรับสูงสุด 9,999,999,999.99 (เกือบ 10 พันล้าน) DECIMAL(12,2) -- รองรับสูงสุด 999,999,999,999.99 (เกือบ 1 ล้านล้าน) DECIMAL(15,2)