6

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

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

这种事情通常被认为是“最佳实践”。

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

4

3 回答 3

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!

其他资源

  • 我在 MSDN 网站上找到了一篇关于货币全球化的好文章,有助于更好地解释这个问题。
  • 这是针对欧元的每个区域设置的不同格式的站点。
于 2009-04-24T01:40:22.787 回答
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:当然,您不存储完全格式化的数字,而只存储单一货币符号。

于 2009-04-23T23:38:09.133 回答
0

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

于 2009-04-24T00:08:50.213 回答