You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL 12中upper()无法正确转换重音字符为大写的解决咨询

解决PostgreSQL 12中西语重音字符upper()转换异常的问题

问题根源在于你使用的united_states.utf8(即en_US.utf8)排序规则是针对美式英语设计的,对西班牙语重音字符的大小写转换逻辑不匹配。以下是具体解决方法:

  • 临时快速解决:调用upper时指定西班牙语排序规则
    直接在upper函数中指定西班牙语的collation,即可正确转换重音字符:

    upper('anuncio genérico para web del cliente' COLLATE "es_ES.utf8");
    

    执行后会得到预期结果:'ANUNCIO GENÉRICO PARA WEB DEL CLIENTE'。

  • 先确认系统是否支持西班牙语排序规则
    先检查PostgreSQL中是否存在西班牙语的collation,执行:

    SELECT name FROM pg_collation WHERE name LIKE '%es_%';
    

    如果结果里有es_ES.utf8这类条目,说明可以直接使用上述方法;如果没有,需要先在操作系统层面安装西班牙语locale:

    • Debian/Ubuntu系统:
      sudo locale-gen es_ES.UTF-8
      sudo update-locale
      sudo systemctl restart postgresql
      
    • RHEL/CentOS系统:
      sudo localedef -i es_ES -f UTF-8 es_ES.UTF-8
      sudo systemctl restart postgresql
      

    重启服务后再次执行pg_collation查询,就能看到对应的排序规则了。

  • 永久解决:修改列的排序规则
    如果不想每次调用upper都手动指定collate,可以直接修改存储西语文本的列的排序规则:

    ALTER TABLE your_table ALTER COLUMN your_column TYPE text COLLATE "es_ES.utf8";
    

    之后对该列调用upper()时,会自动用西班牙语规则处理重音字符的大小写转换。

内容的提问来源于stack exchange,提问作者A Smith

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 10:55:20