PayPal và các cổng thanh toán thường dùng số thập phân **2 chữ số sau dấu phẩy** (ví dụ: 987664.50). Kiểu dữ liệu phù hợp nhất trong MySQL là DECIMAL(10,2) hoặc lớn hơn tùy số tiền tối đa.
DECIMAL(10,2): cho phép tối đa 99,999,999.99 (8 chữ số nguyên + 2 thập phân).- Nếu cần lớn hơn, dùng
DECIMAL(19,4)(chuẩn tài chính) hoặcDECIMAL(15,2).
Ví dụ minh họa
mysql> CREATE TABLE DemoTable1491 (
-> Amount DECIMAL(10,2)
-> );
Query OK, 0 rows affected (0.66 sec)
mysql> INSERT INTO DemoTable1491 VALUES
-> (987664.50),
-> (18783874.90),
-> (35363738.50);
mysql> SELECT * FROM DemoTable1491;
Kết quả:
+-------------+ | Amount | +-------------+ | 987664.50 | | 18783874.90 | | 35363738.50 | +-------------+
Tại sao KHÔNG dùng FLOAT/DOUBLE?
- FLOAT/DOUBLE là kiểu **dấu phẩy động (floating-point)** – bị sai số làm tròn nhị phân (ví dụ: 0.1 không biểu diễn chính xác).
- Khi cộng/trừ tiền tệ, sai số tích lũy dẫn đến sai sót tài chính nghiêm trọng.
- DECIMAL là **fixed-point** – lưu chính xác từng chữ số thập phân.
Best practice
- Luôn dùng
DECIMALcho tiền tệ, giá cả, số lượng tồn kho cần chính xác. - Chọn
M, Dphù hợp:DECIMAL(19,4)là an toàn cho đa số ứng dụng thương mại điện tử. - Ở lớp ứng dụng (Java, PHP, Python...), dùng thư viện tiền tệ chuyên biệt (BigDecimal, decimal.Decimal, v.v.) và chuyển sang DECIMAL khi lưu DB.