在数据库表中存储货币符号

时间:2009-04-23 23:27:44

标签: unicode firebird currency

我们使用firebird作为我们的数据库。我们如何在数据库中存储货币符号。我们应该使用哪个字符集或通常最佳做法?

例如,存储“$”或“¥”直接显示,但更复杂的符号在数据库表中没有正确显示,即“₡”不会存储在数据库中。

这种事情被普遍认为是“最佳实践”。

编辑 -
我指出我们使用的语言是C#。我怀疑UTF8会是答案,但是我们如何将字符存储在数据库中,我们是使用Unicode,Hex还是Decimal等价物......还是只使用字符?

3 个答案:

答案 0 :(得分:6)

此方法的问题

如果您需要输出货币文本,我建议您不要存储与货币数据关联的货币符号。即使符号存储在另一列中,您也可以根据需要将其拉出。相反,更好的方法是存储货币数据的区域/区域设置,然后使用区域默认格式设置货币格式。如果您使用的任何语言/平台没有基于语言环境的货币功能,我仍然认为这是一种更好的方法。在这种情况下,您可以在一些应用程序逻辑中进行格式化,然后将其显示给用户。

这样做的主要原因是,在不同的地区和地区,不​​仅符号不同,而且符号的位置和货币本身的格式也是如此。另外想想你是否需要区分不同类型的美元 - 也许在某些时候你会想要表明美元金额是美元,港元,澳元等。

货币示例

  1.234,56€ - Euro (Germany)
€ 1.234,56  - Euro (Netherlands)
€ 1,234.56  - Euro (Ireland)
  123,456円 - Yen (Japan)
  123,456¥ - Yen (Japan) - yes there are two different currency marks!

其他资源

答案 1 :(得分:2)

我想指出两个主要缺陷:

首先,确保您的数据库已正确安装为utf-8。某些数据库强制您在安装时选择此项,其他数据库则在模式/用户创建时选择此项。

其次,确保您使用的编程语言支持utf-8。特别知道php会导致字符串操作和utf-8出现问题。

firebird的create database语句如下所示:

确保至少使用版本2.0 的firebird,这是支持utf-8的第一个版本。

      CREATE DATABASE <database> 
      USER <username> 
      PASSWORD <password> 
      PAGE_SIZE <pagesize> 
      DEFAULT CHARACTER SET UTF8

或者,您可以使用

创建单个字段
      CREATE TABLE money (
       SYMBOL VARCHAR(50) CHARACTER SET UTF8 )

编辑:澄清要存储的内容:您准确存储屏幕上显示的字符。您很可能只需将它们从任何程序剪切/粘贴到数据库或sql语句中。无需随意转换为int / hex / oct / ascii。

Edit2:当然,您不存储完全格式化的数字,而只存储单一货币符号。

答案 2 :(得分:0)

它也可能是字体问题,有些字体没有所有罕见的utf-8字符。例如Arial缺少它。 “Lucida Sans Unicode”绝对拥有它。尝试在您的查看程序中设置“Lucida Sans Unicode”。