Хранение символов валюты в таблице базы данных - PullRequest
5 голосов
/ 24 апреля 2009

Мы используем Firebird в качестве нашей базы данных. Как мы будем хранить символы валют в базе данных? Какой набор символов мы должны использовать или что обычно является наилучшей практикой?

Например, сохранение «$» или «¥» выглядит простым, но более сложные символы не отображаются правильно в таблице базы данных, т. Е. «₡» не будет храниться в базе данных.

То, что обычно считается «наилучшей практикой» для такого рода вещей.

Edit-
Позвольте мне указать, что мы используем язык C #. Я подозревал, что ответом будет UTF8, но как нам сохранить символ в базе данных, используем ли мы Unicode, Hex или десятичный эквивалент ... или мы просто используем символ?

Ответы [ 3 ]

6 голосов
/ 24 апреля 2009

Проблемы с этим подходом

Если вам нужно вывести текст валюты, я бы рекомендовал вам не хранить символ валюты, связанный с данными валюты. Даже если символ хранится в другом столбце, и вы извлекаете его по мере необходимости. Лучше было бы сохранить регион / локаль для данных валюты, а затем отформатировать валюту, используя форматирование регионов по умолчанию. Если какой-либо язык / платформа, которую вы используете, не имеет функциональности, основанной на локали, я все же думаю, что это лучший подход. В этом случае вы должны выполнить форматирование в некоторой логике приложения, а затем отобразить его пользователю.

Основная причина заключается в том, что в разных регионах и регионах не только отличается символ, но и размещается символ, а также форматирование самой валюты. Также подумайте, если вам нужно различать разные типы долларов - возможно, в какой-то момент вы захотите указать, указана ли сумма в долларах США, гонконгских долларах, AUD и т. Д.

Примеры валют

  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!

Другие ресурсы

2 голосов
/ 24 апреля 2009

Я бы указал на две основные ловушки:

Сначала убедитесь, что ваша база данных правильно установлена ​​как utf-8. Некоторые базы данных вынуждают вас выбирать это во время установки, другие - во время создания схемы / пользователя.

Во-вторых, убедитесь, что используемый вами язык программирования поддерживает utf-8. Известно, что php вызывает проблемы при работе со строками и utf-8.

Оператор создания базы данных для Firebird выглядит следующим образом:

Убедитесь, что вы используете как минимум версию 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: Конечно, вы храните не полностью отформатированное число, а только символы одной валюты.

0 голосов
/ 24 апреля 2009

Это также может быть проблема со шрифтом, некоторые шрифты не имеют всех редких символов utf-8. Например, Arial отсутствует. "Lucida Sans Unicode" определенно имеет это. Попробуйте установить «Lucida Sans Unicode» в своей программе просмотра.

...