PostgreSQL 12 中的 COLLATE 问题



我的问题:

我在 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 和整理 Portuguese_Brazil.1252

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

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

排序规则定义如何比较字符串。它不适用于数值数据。

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

要影响数字和货币符号的格式,请相应地设置lc_numericlc_monetary参数(在 Windows 上Englishen_US其他地方(。请注意,虽然lc_monetary会影响money数据类型的字符串表示形式,但这些设置不会影响数字的字符串表示形式。您需要使用这样的to_char

to_char(1000, '999G999G999D00 L');

最新更新