任何人都成功使用PostgreSQL数据库的特定区域设置,以便文本比较不区分大小写?

Kev*_*ood 5 postgresql macos locale case-sensitive case-insensitive

我正在使用PostgreSQL 8.4在OS X上的Rails中开发一个应用程序.我需要为应用程序设置数据库,以便标准文本查询不区分大小写.例如:

SELECT*FROM documents WHERE title ='令人难以置信的文件'

应该返回相同的结果:

SELECT*FROM documents WHERE title ='Incredible Document'

为了清楚起见,我不想使用:

(1)LIKE在where子句或任何其他类型的特殊比较运算符中

(2)列数据类型或任何其他特殊列索引的citext

(3)任何类型的全文软件,如Sphinx

我想要的是设置数据库区域设置以支持不区分大小写的文本比较.我在Mac OS X(10.5 Leopard)上并且已经尝试将编码设置为"LATIN1",Collat​​ion和Ctype都设置为"en_US.ISO8859-1".到目前为止没有成功.

非常感谢任何帮助或建议.

谢谢!

更新

我已经标出了一个答案,作为正确答案,尊重那些回答的人.但是,我选择以不同于建议的方式解决这个问题.在进一步审查应用程序之后,只有少数几个实例需要对数据库字段进行不区分大小写的比较,因此我将为需要进行不区分大小写的比较创建影子数据库字段.例如,name和name_lower.我相信我在某个地方遇到了这个解决方案.希望PostgreSQL允许类似的SQL Server在未来提供的排序选项(即DOCI).

特别感谢所有回复的人.

Ste*_*aux 1

您可能需要执行一些操作,例如使用列函数来转换文本,例如转换为大写 - 示例:

SELECT * FROM documents WHERE upper(title) = upper('incredible document')
Run Code Online (Sandbox Code Playgroud)

请注意,这可能会扰乱使用索引扫描的性能,但如果这成为问题,您可以定义一个索引,包括目标列上的列函数,例如

CREATE INDEX I1 on documents (upper(title))
Run Code Online (Sandbox Code Playgroud)