postgresql中国际字符的lower()函数

postgresql中国际字符的lower()函数,postgresql,Postgresql,我有一个标准的postgresql服务器,它来自一个新的和一个旧的ubuntu存储库 第一个是postgresql server 8.3.12。在这里,lower()函数可以正确处理丹麦字母“Æ” go=# select lower('Æ'); lower ------- æ (1 row) 现在在postgres 9.1.9上,函数不起作用(它返回相同的大写字母) 有人知道如何改变这种行为吗 (我真正的问题是ilike也不能处理丹麦字符,但我认为上面的例子会让问题更清楚)您的数据库可能

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

第一个是postgresql server 8.3.12。在这里,lower()函数可以正确处理丹麦字母“Æ”

go=#  select lower('Æ');
 lower
-------
 æ
(1 row)
现在在postgres 9.1.9上,函数不起作用(它返回相同的大写字母)

有人知道如何改变这种行为吗


(我真正的问题是ilike也不能处理丹麦字符,但我认为上面的例子会让问题更清楚)

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

在新旧版本的
psql
中选中
\l+
。它们将具有不同的区域设置

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

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

regress=> select lower('Æ');
 lower 
-------
 æ
(1 row)

问题是PostgreSQL集群是由系统(Ubuntu12.04)在安装时创建的,它采用C作为lc_ctype,ASCII作为编码,而不是从语言环境(en_DK.UTF8)继承。在执行pg_dropcluster和pg_createcluster之后,使用了正确的区域设置和编码,一切都开始正常工作。

您确定没有遗漏什么,它在sqlfiddle-版本9.1.9上工作吗?是的,就是区域设置。我最终将LANG环境变量从en_DK.UTF-8更改为da_DK.UTF-8。卸载postgresql,再次安装并从postgresql 8.3恢复转储。如果你的意思是
SQL\u ASCII
,那就是纯粹的邪恶。很高兴你抓到了并修复了它。
regress=> select lower('Æ');
 lower 
-------
 æ
(1 row)