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

Data Type ที่เหมาะสมสำหรับคอลัมน์ Price ใน MySQL คือ DECIMAL


ทำไมต้องใช้ 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)