Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

ควรเก็บฟิลด์ PRICE เป็น INT หรือ FLOAT ในฐานข้อมูล?


ไม่ควรเก็บเป็น 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) สำหรับระบบที่ต้องการความแม่นยำสูงกว่า (เช่น คริปโต/หุ้น)