首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 中存儲貨幣數據的類型選擇:MONEY、SMALLMONEY、DECIMAL 與 DOUBLE/FLOAT 對比

     編輯:MySQL 資料庫相關知識

⚠️ 澄清:MySQL 原生無 MONEY 類型

文中描述的 MONEY(8 字節,±922337203685477.5808)與 SMALLMONEY(4 字節,±214748.3647)是 **SQL Server / Sybase** 的專有類型。MySQL **不支持**這兩個類型。

MySQL 貨幣數據類型選擇指南

類型存儲精度/範圍適用場景
DECIMAL(p,s) / NUMERIC(p,s)每 9 位數字 4 字節精確定點數,最多 65 位數字貨幣、金融、精確計算首選,避免浮點誤差
DOUBLE[(M,D)]8 字節雙精度浮點,約 15 位有效數字科學計算、近似值、非金融場景
FLOAT[(M,D)]4 字節單精度浮點,約 7 位有效數字極少用,精度不足
BIGINT8 字節整數 ±9.22e18存儲「分」為單位的整數(如 100 元 = 10000 分),應用層除 100 顯示

最佳實踐建議

  1. 強烈推薦 DECIMAL(19,4) 或 DECIMAL(15,2):滿足大多數貨幣精度(萬億級、分級),計算精確無誤差。
  2. 極高性能、極大數據量、可接受「分」級整數運算:用 BIGINT 存分,應用層格式化。
  3. 嚴禁用 FLOAT/DOUBLE 存儲金額:0.1 + 0.2 != 0.3 會導致對賬失衡。
  4. 遷移 SQL Server MONEY 至 MySQL:直接映射為 DECIMAL(19,4)。

示例

CREATE TABLE account (
  id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  balance DECIMAL(19,4) NOT NULL DEFAULT 0.0000 COMMENT '賬戶餘額,精確到 0.0001 元'
);
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved