我想在MySQL数据库中存储许多记录。它们都包含货币价值。但我不知道每个数字要插入多少位。 为此,我必须使用哪种数据类型? VARCHAR或INT(或其他数值数据类型)?
当前回答
将钱存储为BIGINT乘以100或更多,以使用更少的存储空间为理由,在所有“正常”情况下都没有意义。
为了与GAAP保持一致,以DECIMAL(13,4)存储货币就足够了。 MySQL手册读到每9位需要4个字节来存储DECIMAL。 https://dev.mysql.com/doc/refman/8.0/en/precision-math-decimal-characteristics.html DECIMAL(13,4)表示9位+ 4位小数(小数点后数位)=> 4 + 2字节= 6字节 与存储BIGINT所需的8个字节相比。
其他回答
在提出这个问题的时候,没有人考虑比特币的价格。在BTC的情况下,使用DECIMAL(15,2)可能是不够的。如果比特币将上涨到10万美元或更多,我们将至少需要DECIMAL(18,9)来支持我们的应用程序中的加密货币。
DECIMAL(18,9)在MySQL中占用12个字节的空间(每9个数字占用4个字节)。
因为货币需要精确的表示,所以不要使用像float这样的近似数据类型。您可以使用定点数值数据类型
decimal(15,2)
15是精度(包括小数点在内的值的总长度) 2是小数点后的位数
参见MySQL数值类型:
当需要保持精确的精确度时,例如货币数据,就会使用这些类型。
将钱存储为BIGINT乘以100或更多,以使用更少的存储空间为理由,在所有“正常”情况下都没有意义。
为了与GAAP保持一致,以DECIMAL(13,4)存储货币就足够了。 MySQL手册读到每9位需要4个字节来存储DECIMAL。 https://dev.mysql.com/doc/refman/8.0/en/precision-math-decimal-characteristics.html DECIMAL(13,4)表示9位+ 4位小数(小数点后数位)=> 4 + 2字节= 6字节 与存储BIGINT所需的8个字节相比。
你可以使用DECIMAL或NUMERIC,两者都是一样的
DECIMAL和NUMERIC类型存储精确的数值数据值。当需要保持精确的精确度时,例如货币数据,就会使用这些类型。在MySQL中,NUMERIC被实现为DECIMAL,因此下面关于DECIMAL的说明同样适用于NUMERIC。: MySQL
例如十进制(10,2)
良好的阅读
我更喜欢使用BIGINT,并通过与100相乘来存储值,这样它将成为整数。
例如,要表示93.49的货币值,该值应存储为9349,而显示的值可以除以100并显示。这将占用更少的存储空间。
警告: 大多数情况下,我们不执行货币*货币乘法,以防万一,如果我们正在执行,然后将结果除以100并存储,以便返回适当的精度。
推荐文章
- MySql: Tinyint (2) vs Tinyint(1) -有什么不同?
- 如何在MySQL表中移动列?
- 在MySQL中选择最后一行
- 如何删除MySQL root密码
- MySQL对重复键更新在一个查询中插入多行
- mysql_connect():[2002]没有这样的文件或目录(试图通过unix:///tmp/mysql.sock连接)在
- MySQL:如何复制行,但改变几个字段?
- 不能删除或更新父行:外键约束失败
- Mysql错误1452:不能添加或更新子行:外键约束失败
- MySQL DISTINCT在GROUP_CONCAT()上
- 第一次设计数据库:我是否过度设计了?
- MySQL选择一个列DISTINCT,与其他列相对应
- 错误1022 -不能写;表中重复的键
- 如何修改列和更改默认值?
- 如何在MySQL 8.0中授予root用户所有权限