首页 >> 基础教程
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转换成没有小数的单位。
最新文章
20.5 性能优化建议2026-05-08
20.4 复杂查询实现2026-05-08
20.3 表创建与数据初始化2026-05-08
20.2 数据库设计2026-05-08
20.1 项目需求分析:博客系统2026-05-08
19.4 自动化备份策略2026-05-08
19.3 导出和导入数据2026-05-08
19.2 恢复备份数据2026-05-05
19.1 使用mysqldump备份数据2026-05-05
18.4 实战:开发简单的学生管理系统2026-05-05

发表评论
所有评论