我们使用firebird作为我们的数据库.我们如何在数据库中存储货币符号.我们应该使用哪个字符集或通常最佳做法?
例如,存储"$"或"¥"直接显示,但更复杂的符号在数据库表中没有正确显示,即"₡"不会存储在数据库中.
什么被普遍认为是这种事情的"最佳实践".
编辑 -
让我指出我们使用的语言是C#.我怀疑UTF8会是答案,但我们如何将字符存储在数据库中,我们是使用Unicode,Hex还是Decimal等效的....还是我们只是使用字符?
如果您需要输出货币文本,我建议您不要存储与货币数据关联的货币符号.即使符号存储在另一列中,您也可以根据需要将其拉出.相反,更好的方法是存储货币数据的区域/区域设置,然后使用区域默认格式设置货币格式.如果您使用的任何语言/平台没有基于语言环境的货币功能,我仍然认为这是一种更好的方法.在这种情况下,您将在一些应用程序逻辑中进行格式化,然后将其显示给用户.
这样做的主要原因是,在不同的地区和地区,不仅符号不同,而且符号的位置和货币本身的格式也是如此.另外想想你是否需要区分不同类型的美元 - 也许在某些时候你会想要指出美元金额是美元,港元,澳元等.
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)
我想指出两个主要陷阱:
首先,确保您的数据库已正确安装为 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:当然,您不存储完全格式化的数字,而只存储单一货币符号。
| 归档时间: |
|
| 查看次数: |
8951 次 |
| 最近记录: |