在我们的Postgres 12数据库中,使用United_states.utf8排序规则,我们有一个包含西班牙数据的数据集,其中包括重音字符.但是,当我们对该字段中的值进行上移()时,不带重音的字符会正确地上移,而带重音的字符则不会.

upper('anuncio genérico para web del cliente')等于'ANUNCIO GENéRICO PARA WEB DEL CLIENTE'

我如何纠正这一点才能得到'ANUNCIO GENÉRICO PARA WEB DEL CLIENTE'的预期结果?

我曾try 将字符串强制为c和POSIX排序规则,但这些都只是ANSI.

推荐答案

我已经发现了这个问题并找到了解决方案.正如问题中提到的,我的数据库使用'English_United States.utf8'排序规则作为默认,以匹配UTF8的编码.然而,在Windows环境中,'English_United Kingdom.1252'归类使用UTF8编码,尽管指定了ANSI,并按预期返回大写字符.

为了解决这个问题,我必须在数据库中使用;

CREATE COLLATION "English_United Kingdom.1252" (LC_COLLATE='English_United Kingdom.1252', LC_CTYPE='English_United Kingdom.1252');

这将其置于公共架构中.然后,您可以在查询中手动更正该问题,方法是对任何带重音的字符串调用 collate "English_United Kingdom.1252",或使用

alter table [table_name] alter column [column_name] type text collate "English_United Kingdom.1252"

对任何带有重音字符的列进行排序,以永久修复排序规则.遗憾的是,创建数据库后,如果不执行完整备份、删除和恢复,则无法更改数据库的默认排序规则.

Postgresql相关问答推荐

处理Ruust-DIESEL中的Jsonb PostgreSQL列

有没有一种方法可以在参数中添加密码,并在批处理文件中需要时自动获取密码?

PostgreSQL存储过程中不存在游标

在Postgres游标中从一行变量中减go 另一行变量

postgres 不同类型的更新

无法将 json 范围读取为 pgtype.Int4range

Postgres 使用不同元素数据类型的订单数据

如何在plpgsql中找到一行中的最大值?

我在try 访问我的数据库表时在 postgresql 中收到 aclcheck_error 错误

无法从外部连接到在 AWS EC2 实例上运行的 Postgres

从dump文件中恢复三张表遇到的问题

在postgres的同一列中存储不同数据类型的合理方法?

SQLAlchemy、Psycopg2 和 Postgresql 复制

使用 current_setting() 判断值

返回 array_agg() 中的第一个元素

如何缩小 pg_toast 表?

Postgres Npgsql 连接池

PostgreSQL 9 在 Windows 上安装:Unable to write inside TEMP environment path.

Rails + Postgres fe_sendauth:no password supplied

PostgreSQL 多种认证方式