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

6 unicode firebird currency

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

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

什么被普遍认为是这种事情的"最佳实践".

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

Eli*_*jah 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!
Run Code Online (Sandbox Code Playgroud)

其他资源


And*_*son 2

我想指出两个主要陷阱:

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

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

firebird 的创建数据库语句如下所示:

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

      CREATE DATABASE <database> 
      USER <username> 
      PASSWORD <password> 
      PAGE_SIZE <pagesize> 
      DEFAULT CHARACTER SET UTF8
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用以下命令创建单个字段

      CREATE TABLE money (
       SYMBOL VARCHAR(50) CHARACTER SET UTF8 )
Run Code Online (Sandbox Code Playgroud)

编辑:澄清要存储的内容:您可以准确存储屏幕上显示的字符。最有可能的是,您可以将它们从任何程序剪切/粘贴到数据库或 SQL 语句中。无需摸索到 int/hex/oct/ascii 的转换。

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