【问题标题】:Storing numbers for different formats in MySQL在 MySQL 中存储不同格式的数字
【发布时间】:2013-01-22 16:22:53
【问题描述】:

正在构建一个允许用户以不同货币格式输入值的应用程序。

我最初的想法是将数据保存为以下格式。

  • 金额 - 字符串
  • currency - 带有 ISO 4217 货币代码的字符串,例如英镑、美元、卢布

这个设计是个好主意还是应该用于金额字段、整数、小数或浮点类型?

我不确定不同格式的格式将如何影响存储。

【问题讨论】:

  • 最好选择一种有意义的类型,而不仅仅是字符串,例如DECIMAL(8, 2)
  • 使用 DECIMAL 类型确实会限制用户可以存储的数量。
  • 当然,您可以更改比例和精度,例如DECIMAL(40, 5) ...但问题没有说明任何具体意图。
  • 好吧,我做到了? “允许用户以不同的货币格式输入值”
  • 这就像说你想要漂浮的东西,当我建议划艇时你会说“哇,这不适合我的 100 名海盗船员,枪在哪里?!” =p

标签: mysql database-design


【解决方案1】:

我的投票是:

为什么要使用 FK 参考和货币表?然后,您可以将更多信息与每种货币一起存储(例如相关文化或格式信息),并在必要时添加一个包含汇率的附加表格,以便您可以将所有内容加起来为一种基础货币。

此外,现在存储很便宜。


注意:

  • 我不会使用字符串来表示金额,因为您无法添加它们并且您无法(轻松地)按它们订购。您还会丢失金额确实是数字的内置验证。

  • 我也不会选择浮动金额,因为货币金额应该是准确的。您不想对每个结果进行四舍五入来显示它;如果你在错误的方向上偏离了一分钱怎么办?

【讨论】:

  • 感谢货币表的建议,我实际上考虑过类似的做法,但在数据库之外使用 JSON 文件来组织信息。我试图找出的最大问题是小数位和小数长度。
【解决方案2】:

我选择 DECIMAL,但这可能取决于“金额”的应用。

  • 这可能有助于理解浮点数和小数之间的区别:

Difference between float and decimal data type

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-13
    • 2010-10-29
    • 1970-01-01
    • 2022-01-05
    • 2013-09-25
    • 2018-11-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多