1

我的问题:

我在 Windows 10 中工作,我的计算机设置为葡萄牙语 (pt_BR);

我正在 PostgreSQL 中构建一个数据库,其中我需要某些列保留为葡萄牙语,但其他列保留在 en_US 中 - 即那些存储数字和货币的列。我需要 $ 而不是 R$ 和 1,000.00 而不是 1.000,00。

我尝试使用 COLLATE 语句以这种方式创建列,如下所示:

CREATE TABLE crm.TESTE (
    prodserv_id varchar(30) NOT NULL,
    prodserv_name varchar(140) NULL,
    fk_prodservs_rep_acronym varchar(4) NULL,
    prodserv_price numeric null collate "en_US",
    CONSTRAINT pk_prodservs_prodserv_id PRIMARY KEY (prodserv_id)
);

但我收到错误消息:

SQL 错误 [42704]:错误:用于编码“UTF8”的排序规则“en_US”不存在

数据库元数据显示默认编码:UTF8 和 Collat​​e Portugal_Brazil.1252

它将部署在我的运行 Linux 的 ISP 上。

任何建议将不胜感激。提前致谢。

4

1 回答 1

1

排序规则定义了字符串的比较方式。它不适用于数值数据。

此外,PostgreSQL 使用操作系统的排序规则,这在将数据库从 Windows 移植到其他操作系统时会导致问题。排序规则将English在 Windows 和en_US.utf8使用 glibc 的操作系统上调用。

要影响数字和货币符号的格式,请适当设置lc_numericlc_monetary参数(English在 Windows 上,en_US其他地方)。请注意,虽然lc_monetary会影响money数据类型的字符串表示,但这些设置不会影响数字的字符串表示。你需要to_char像这样使用:

to_char(1000, '999G999G999D00 L');
于 2020-01-10T07:46:19.413 回答