首页 >> 基础教程
1. 为什么用
记录货币用什么类型比较好?
在MySQL中存储货币值时,推荐使用 DECIMAL
类型,原因如下:
1. 为什么用 DECIMAL
?
精确性:货币计算需要绝对避免浮点数误差(如
FLOAT
/DOUBLE
因二进制表示可能导致舍入错误)。定点数特性:
DECIMAL
以字符串形式存储数字,确保十进制运算精确,适合财务计算。灵活精度:可自定义整数和小数部分的位数(如
DECIMAL(10, 2)
表示整数部分最多8位,小数部分固定2位)。
2. 定义方式示例
price 总位数10位(含小数),小数占2位(如 12345678.99)
id INT PRIMARY KEY, name VARCHAR(100), price DECIMAL(10, 2));
3. 其他类型的缺点
FLOAT
/DOUBLE
:
二进制浮点数无法精确表示十进制小数(如0.1
),导致累计误差,不推荐用于货币。INT
/BIGINT
:
需将货币转为最小单位存储(如“元”转为“分”),代码复杂且易出错。仅在高性能整数运算场景考虑(仍需谨慎)。VARCHAR
:
无法直接参与数学运算,需转换且效率低,禁止使用。
4. 一些建议
精度选择:
通用场景:
DECIMAL(10, 2)
(最大到千万级,精确到分)。大额金融:
DECIMAL(20, 2)
(如万亿级交易)。计算时的注意:
使用ROUND()
函数避免中间结果误差(如ROUND(price * quantity, 2)
)。无符号选项:
若金额永不为负,可加UNSIGNED
:DECIMAL(10, 2) UNSIGNED
。
总结
类型 | 是否推荐 | 原因 |
---|---|---|
DECIMAL | ✅ 强烈推荐 | 精确、无误差、直接表示金额 |
FLOAT/DOUBLE | ❌ 禁止 | 浮点精度损失导致财务错误 |
INT/BIGINT | ⚠️ 特殊情况 | 需代码转换单位,维护复杂 |
VARCHAR | ❌ 禁止 | 无法计算,效率低下 |
总的来说,始终优先使用 DECIMAL
,确保财务数据的准确性和可靠性。当然也有一些例外,比如确定精度只到小数点后2位,那么也可以用INT/BIGINT,原数据*100转换成没有小数的单位。
最新文章
InnoDB 和 MyISAM 主要有什么区别?2025-07-06
mysql存储引擎应该怎么选择?2025-07-06
mysql的几种存储引擎2025-07-06
MySQL 的段区页行2025-07-06
一条更新语句是如何执行的?2025-07-06
mysql中一条查询语句是如何执行的?2025-07-02
MySQL基础架构及执行流程解析2025-07-02
MySQL SQL语法树解析过程详解2025-07-02
mysql中SQL 的隐式数据类型转换?2025-07-01
MySQL 第 3-10 条记录怎么查?2025-06-30