默认情况下,PostgreSQL没有不区分大小写的排序规则.其文档描述了一种基于操作系统语言环境添加新排序规则的方法,例如:
http://www.postgresql.org/docs/9.1/static/sql-createcollation.html
但是创建的排序规则区分大小写.
我的问题是:如何将一个案例INsensitive排序添加到PostgreSQL服务器?
有人可以描述一个工作流程吗?
我无法在网上找到任何引用,而有些人提到它是可能的.我已经在Windows上测试了v9.1 - Debian GNU/Linux和v9.2.
只是为了澄清我知道:
这些不是我想要的解决方案.
嗨我试图使用sql炼金术在sqlite数据库中为特定列实现升序排序,我遇到的问题是我要排序的列有大小写数据,因此排序顺序无法正常工作.
然后我发现了关于func.lower并尝试将其合并到查询中,但它或者错误或者只是不起作用,有人能给我一个如何使用sql炼金术做一个不区分大小写的升序排序的工作示例.
以下是我到目前为止(抛出错误): -
session.query(ResultsDBHistory).order_by(func.lower(asc(history_sort_order_column))).all()
Run Code Online (Sandbox Code Playgroud)
python 2.6.6 sql alchemy 0.7.10
如何将 Postgresql 数据库更新为不区分大小写?
我已经有一些表和一些数据,目前它们区分大小写,但我想将它们全部更新为不区分大小写。
我正在使用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",Collation和Ctype都设置为"en_US.ISO8859-1".到目前为止没有成功.
非常感谢任何帮助或建议.
谢谢!
更新
我已经标出了一个答案,作为正确答案,尊重那些回答的人.但是,我选择以不同于建议的方式解决这个问题.在进一步审查应用程序之后,只有少数几个实例需要对数据库字段进行不区分大小写的比较,因此我将为需要进行不区分大小写的比较创建影子数据库字段.例如,name和name_lower.我相信我在某个地方遇到了这个解决方案.希望PostgreSQL允许类似的SQL Server在未来提供的排序选项(即DOCI).
特别感谢所有回复的人.
我目前正在做一个已经开发了几个月的 Java 项目。项目差不多完成了,现在我意识到 Postgres 是区分大小写的。
在我的登录过程中,它无法区分username和“用户名”。我使用 Java base、Hibernate 和 JPA 作为后端实现,并使用 Postgres 作为数据库。
我一直在互联网上搜索解决方案,我得到的大部分答案都是建议我使用解决方案:
select loginId from user where
lower(loginId)=loginid.toLowerCase();
Run Code Online (Sandbox Code Playgroud)
或将表列的数据类型更改为 citext。
但是有没有更快的方法来做到这一点?或者是否有任何变量Postgres.conf能够控制不区分大小写?或者在休眠状态下我可以轻松控制它?
我知道使用方法lower(loginId)=loginId.toLowerCase()是解决问题的最简单方法,但是我的项目中有很多代码需要更改,可能需要很长时间才能修复。将数据类型更改为 citext 对于很久以前实施的项目来说并不是一个很好的解决方案。
这里有人有更好的解决方案来解决我当前的问题吗?