MySQL - 存储货币符号的最佳方式?

Posted

技术标签:

【中文标题】MySQL - 存储货币符号的最佳方式?【英文标题】:MySQL - Best way to store currency symbols? 【发布时间】:2011-10-19 00:15:46 【问题描述】:

只是想知道在 mysql 数据库中存储货币值和符号的最佳方式是什么?

感谢浏览SO,我将我的金额存储为十进制 (19,2) 值 - 这很好 - 但我更关心货币符号(例如 €、£、$ 等),因为我想让最终用户在设置阶段设置自己的货币单位。我还想避免任何不确定性,目前设置为 utf8(双方)。

我目前的方法是将它们存储为html Numerical Codes,使用php ifelse 语句过滤输入。这是最好的方法吗?如果不是,那是什么?有没有必要?提前致谢!

【问题讨论】:

你也转换单位吗?如果是,则应在之后添加货币。还要始终确保将有关哪种货币的信息保存到数据库中(欧元、美元……) 澄清我的立场:我居住在爱尔兰,分为北方(£stg)和***(欧元)。该数据库适用于本地 Pony 集团,该集团将以两种货币收取会员费。他们可能还希望在未来跟踪其他货币的价值。在这方面,虽然他们可能将会员资格设置为(例如)50 欧元,但来自北方的人应该只需要支付 43.64 英镑。这就是为什么 bertzzie 提到国际化表让我很感兴趣的原因...... "来自北方的人应该只需要支付" 但是国际化表只会为您提供正确的货币符号,但不能帮助您转换金额。一种方法是使用一些货币转换网络服务,或者以当前需要的两种货币存储的静态金额。 @feeela 是的,我现在明白了——国际化库实际上只用于语言。我可能会处理每月甚至每两年更新一次的静态数字(在这种情况下,小数点的变化在很大程度上是无关紧要的)。 【参考方案1】:

恕我直言,您可以将数据分成两列

amount      = decimal(19,2) --- question : unsigned for positive value only
currency_id = int(10) unsigned --- which is ID to currency table

currency 字段引用另一个表时, 您可以将各种附加信息存储到该表中(例如汇率) 更好地描述您希望符号的呈现方式

【讨论】:

有人想扩展这个建议吗?我认为这对我来说最有意义(尽管我很想知道如何自动更新汇率:P)... 只是一个脚注:无符号十进制 - 您可以存储 0.00 到 99,999,999.99 之间的值 这是不正确的,因为不是所有的货币都有 2 位小数。有些有 3 个,有些则不是这样。【参考方案2】:

我会使用 character (3) 并存储货币代码 (http://en.wikipedia.org/wiki/ISO_4217#Active_codes)。例如,欧元、美元、英镑等,并且仅在显示时显示适当的符号。

【讨论】:

【参考方案3】:

您是否考虑过完全不使用符号,而是使用ISO 4217 三字母代码?

如有必要,使用另一个表来处理从这些映射到更用户友好的输出符号格式。

【讨论】:

【参考方案4】:

您是否必须根据用户的选择来转换货币?如果是,您可以创建一个新表来存储货币符号和汇率。

如果您只想根据用户的区域设置显示货币,您可能需要尝试使用国际化库。

【讨论】:

解释国际化库? @Eamonn:国际化库是一个帮助您本地化应用程序的库。例如,参见 GNU gettext(此处为示例:mel.melaxis.com/devblog/2005/08/06/…)。它通常称为 i18n。去谷歌那个:) 国际化主要是处理语言 - gettext() 函数不会为货币做任何事情。 哦,抱歉,没有意识到这一点。我只会对@Alnitak 的帖子投赞成票(希望对您有所帮助)。

以上是关于MySQL - 存储货币符号的最佳方式?的主要内容,如果未能解决你的问题,请参考以下文章

在数据库中存储货币价值的最佳方式是啥?

在 MySQL 数据库中存储 &(&) 的最佳方式

从数据库中选择多个货币代码的最新汇率的最佳方式

带有可能符号的货币列表 - iPhone 应用程序开发

使用CodeIgniter在mySql数据库中未存储货币符号

MySQL:存储 MAC 地址的最佳方式?