ไม่ควรเก็บเป็น INT หรือ FLOAT สำหรับราคา/เงิน ควรใช้ชนิดข้อมูล DECIMAL() เสมอ
เหตุผล: จำนวนเต็ม (INT) มักถูกใช้แทนทศนิยมโดยคูณ 100 (เก็บเซนต์) แต่ใน MySQL จะแปลงเป็น DECIMAL ภายในระบบอยู่แล้ว การใช้ FLOAT/DOUBLE อาจเกิดปัญหาความแม่นยำ (Precision Error) จากการจัดเก็บ floating-point
รูปแบบ DECIMAL
DECIMAL(M,D);
- M (Precision): จำนวนหลักทั้งหมด
- D (Scale): จำนวนหลักหลังจุดทศนิยม
ตัวอย่างการใช้งาน
สร้างตาราง:
mysql> CREATE TABLE Decimal_Demo ( Id INT NOT NULL AUTO_INCREMENT, PRICE DECIMAL(18,2), PRIMARY KEY(Id) );
เพิ่มข้อมูลราคาสูง:
mysql> INSERT INTO Decimal_Demo(PRICE) VALUES(99999999999999.99); mysql> INSERT INTO Decimal_Demo(PRICE) VALUES(10000000000000.99);
ผลลัพธ์:
+----+-------------------+ | Id | PRICE | +----+-------------------+ | 1 | 99999999999999.99 | | 2 | 10000000000000.99 | +----+-------------------+
แนวทางปฏิบัติที่ดีที่สุด: ใช้ DECIMAL(18,2) สำหรับสกุลเงินทั่วไป หรือ DECIMAL(19,4) สำหรับระบบที่ต้องการความแม่นยำสูงกว่า (เช่น คริปโต/หุ้น)