为什么 postgres `lower()` 在我的函数中不是小写 È

问题描述

看看这个快照:

enter image description here

有人可以向我解释发生了什么吗?

换句话说: 我有这个功能

create or replace function primera_majuscula(str name) returns name as $$
    begin
        return upper(substring(str from 1 for 1)) || lower(substring(str from 2));
    end;
$$ language plpgsql;

它接收一个名称类型的参数,并返回一个名称类型的值。它的名字是“primera_majuscula()”,意思是“first_capital_letter()”,它返回输入参数的第一个字母大写,其他字母小写。这样做的方法是使用 substring 函数,将大写的第一个字母与降低的其他字母连接起来。

此外,正如您在快照中看到的那样,如果我直接在提示上询问函数的主体,它就可以正常工作。但在我要求该功能的情况下并非如此。

有人能解释一下吗?真的是BUG吗?

我尝试重新启动服务器,因为它没有在开发安装中犯错误。只是在生产中。但没什么。


添加文本

这个问题与发表在

The lower() function on international characters

当然,我的开发服务器(没有出现问题)和生产服务器(出现问题的地方)之间的 Collat​​e 和 Ctype 是不同的。

在开发服务器中,我有这个:

enter image description here

在生产版本中,此:

enter image description here

这可以解释不同的行为。

所以,接下来我只会专注于制作:

与 user2728690 发布的问题相反,我的工作正常:

enter image description here

总之,我终于把函数中用到的类型改了。我放的是文字而不是名字。

create or replace function primera_majuscula(str text) returns text as $$
    begin
        return upper(substring(str from 1 for 1)) || lower(substring(str from 2));
    end;
$$ language plpgsql;

它奏效了。

老实说,我没有时间重新安装集群。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)