Kiểu dữ liệu tốt nhất cho cột giá tiền là DECIMAL (hoặc NUMERIC - đồng nghĩa).
Tại sao chọn DECIMAL?
- Lưu trữ chính xác giá trị thập phân, không bị sai số làm tròn như FLOAT/DOUBLE.
- Phù hợp cho tiền tệ, tài chính, kế toán nơi độ chính xác tuyệt đối là bắt buộc.
- Hỗ trợ độ chính xác tùy ý (precision, scale).
Cú pháp
DECIMAL(precision, scale)
- precision: Tổng số chữ số tối đa (1-65).
- scale: Số chữ số sau dấu phẩy thập phân (0-30, ≤ precision).
Ví dụ DECIMAL(10,2): tối đa 10 chữ số, 2 chữ số sau dấu phẩy → khoảng từ -99999999.99 đến 99999999.99.
Ví dụ minh họa
mysql> CREATE TABLE PriceDemo (ProductPrice DECIMAL(10,2)); Query OK, 0 rows affected (0.60 sec) mysql> INSERT INTO PriceDemo VALUES (12345.67), (99999999.67), (123456.67), (4444444.50); Query OK, 4 rows affected
Kết quả:
+--------------+ | ProductPrice | +--------------+ | 12345.67 | | 99999999.67 | | 123456.67 | | 4444444.50 | +--------------+
So sánh với FLOAT/DOUBLE
| Kiểu | Độ chính xác | Kích thước | Phù hợp cho |
|---|---|---|---|
| DECIMAL(10,2) | Chính xác tuyệt đối | ~5-6 bytes | Tiền tệ, giá, tài chính |
| FLOAT | Khoảng 7 chữ số chính xác | 4 bytes | Khoa học, đo lường |
| DOUBLE | Khoảng 15 chữ số chính xác | 8 bytes | Khoa học, tính toán phức tạp |
Lưu ý
- Không bao giờ dùng FLOAT/DOUBLE cho tiền tệ.
- Chọn precision đủ lớn cho giá trị tối đa dự kiến (ví dụ 12,2 cho tỷ đồng).
- MySQL lưu DECIMAL dưới dạng chuỗi nén (packed decimal), hiệu năng tốt.