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 - 存储货币符号的最佳方式?的主要内容,如果未能解决你的问题,请参考以下文章