ใช้ DECIMAL(21,20) สำหรับความแม่นยำสูงสุด
ชนิดข้อมูล DECIMAL(M,D) เหมาะสำหรับเก็บตัวเลขทศนิยมที่ต้องการความแม่นยำสูง (Exact Value) โดยไม่มีปัญหาการปัดเศษแบบ Floating Point
- M (Precision): จำนวนหลักทั้งหมด (รวมทั้งฝั่งซ้ายและขวาจุดทศนิยม) สูงสุด 65
- D (Scale): จำนวนหลักทางด้านขวาจุดทศนิยม สูงสุด 30
ตัวอย่าง: DECIMAL(21,20) = 1 หลักฝั่งซ้าย + 20 หลักฝั่งขวา
mysql> CREATE TABLE DemoTable1493 (
-> LongValue DECIMAL(21,20)
-> );
Query OK, 0 rows affected (0.48 sec)
mysql> INSERT INTO DemoTable1493 VALUES
-> (1.0047464644664677373),
-> (5.999999484757773),
-> (0.009994995885885);
Query OK, 3 rows affected
ผลลัพธ์ (MySQL จะเติมศูนย์ท้ายให้ครบ 20 ตำแหน่ง)
+------------------------+ | LongValue | +------------------------+ | 1.00474646446646773730 | | 5.99999948475777300000 | | 0.00999499588588500000 | +------------------------+
ตารางเปรียบเทียบชนิดข้อมูลตัวเลข
| ชนิดข้อมูล | ความแม่นยำ | เหมาะสำหรับ |
|---|---|---|
DECIMAL(M,D) | Exact (แม่นยำสมบูรณ์) | เงิน, การคำนวณทางการเงิน, วิทยาศาสตร์ |
FLOAT | Approximate (~7 digits) | ค่าทางวิทยาศาสตร์ที่ยอมรับความคลาดเคลื่อนได้ |
DOUBLE | Approximate (~15 digits) | ค่าทางวิทยาศาสตร์ ต้องการช่วงกว้างกว่า FLOAT |
เคล็ดลับการเลือก M และ D
- สำหรับเงิน:
DECIMAL(19,4)หรือDECIMAL(10,2)(ดูบทความถัดไป) - สำหรับพิกัด GPS:
DECIMAL(10,7)หรือDECIMAL(11,8) - สูตร:
M = (จำนวนหลักสูงสุดฝั่งซ้าย) + D - MySQL จัดเก็บ DECIMAL เป็น Binary Coded Decimal (4 bits ต่อหลัก) ประหยัดพื้นที่