首页 >> 基础教程
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转换成没有小数的单位。
最新文章
13.6 EXPLAIN语句:查看查询执行计划2026-04-08
13.5 索引使用原则:什么时候建索引?2026-04-08
13.4 查看和删除索引2026-04-08
13.3 索引类型:B树、哈希、全文索引2026-04-08
13.2 创建索引:CREATE INDEX2026-04-08
13.1 什么是索引?为什么需要它?2026-04-08
12.5 联合查询:UNION和UNION ALL2026-04-07
12.4 相关子查询2026-04-07
12.3 FROM子句中的子查询2026-04-06
12.2 WHERE子句中的子查询2026-04-05

发表评论
所有评论