我们使用firebird作为我们的数据库。我们如何在数据库中存储货币符号。我们应该使用哪个字符集或通常最佳做法?
例如,存储“$”或“¥”直接显示,但更复杂的符号在数据库表中没有正确显示,即“₡”不会存储在数据库中。
这种事情被普遍认为是“最佳实践”。
编辑 -
我指出我们使用的语言是C#。我怀疑UTF8会是答案,但是我们如何将字符存储在数据库中,我们是使用Unicode,Hex还是Decimal等价物......还是只使用字符?
答案 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”。