Как работает настройка языка LC_NUMERIC в PostgreSQL? - PullRequest
3 голосов
/ 20 января 2012

Может ли кто-нибудь дать представление о поведении локали и числовых типов в PostgreSQL?Мы работаем с итальянским языком.Это разделение запятой для десятичной части.Установка в postgresql.conf

# These settings are initialized by initdb, but they can be changed.
lc_messages = 'it_IT.UTF-8'                     # locale for system error message
                                                # strings
lc_monetary = 'it_IT.UTF-8'                     # locale for monetary formatting
lc_numeric = 'it_IT.UTF-8'                      # locale for number formatting
lc_time = 'it_IT.UTF-8'                         # locale for time formatting

.. ничего не делает!Он ведет себя вполне соответствующим образом с датами, и поэтому, НО числовой тип остается разделенным точками с запятой для десятичной части.локаль в разных областях: db, серверный скрипт, os и клиентская сторона. Решили избежать форматирования локали и использовать локаль en_EN .Форматирование локали будет применено только в момент вывода и т. Д.

1 Ответ

6 голосов
/ 20 января 2012

Я цитирую руководство :

lc_numeric (string)

Устанавливает локаль для форматирования чисел, например, с семейством функций to_char.

Относится к этим функциям форматирования типа . Вы должны быть в состоянии воспроизвести следующую демонстрацию:

SHOW lc_numeric;

de_AT.UTF-8

SELECT to_number('13,4','999D99')

13,4

SELECT to_char(13.4,'FM999D99')

1022 * 13,4 *

SET lc_numeric = 'C';
SELECT to_number('13,4','999D99')

134

SELECT to_char(13.4,'FM999D99')

13,4

RESET lc_numeric;

Шаблон шаблонов в руководстве .

Формат чисел в выражениях SQL не изменяется в зависимости от настроек локали. Это было бы безумием.


С другой стороны: вы знаете, что вам нужно (как минимум) перезагрузить сервер после изменения postgresql.conf.

pg_ctl reload
...