2

我有一个来自新旧 ubuntu 存储库的标准 postgresql 服务器。

首先是postgresql server 8.3.12。这里的 lower() 函数在丹麦字母 'Æ' 上正常工作

go=#  select lower('Æ');
 lower
-------
 æ
(1 row)

现在在 postgres 9.1.9 上,该函数不起作用(它返回相同的大写字母)

go=# select lower('Æ');
 lower
-------
Æ
(1 row)

有谁知道如何改变这种行为?

(我真正的问题是 ilike 也不适用于丹麦语字符,但我认为上面的示例会使问题更清楚)

4

2 回答 2

5

您的数据库可能是使用不同的语言环境创建的。

检查旧版本和新版本\l+psql他们将有不同的语言环境设置。

其他可能性是不同的操作系统/版本。PostgreSQL 使用 libc 的语言环境规则,并且一些平台(尤其是 Mac OS X)有一点……特别的……libc。

en_AU.UTF-8在Fedora 19 上运行数据库的9.1.9上,我得到:

regress=> select lower('Æ');
 lower 
-------
 æ
(1 row)
于 2013-08-29T11:32:07.207 回答
3

问题是PostgreSQL集群是系统(Ubuntu 12.04)在安装时创建的,并且将C作为lc_ctype,ASCII作为编码,而不是从语言环境继承,即en_DK.UTF8。在执行 pg_dropcluster 和 pg_createcluster 之后,使用了正确的语言环境和编码,一切都开始正常工作。

于 2013-08-30T10:08:52.943 回答