在几个SO帖子中,OP要求以不区分大小写的方式搜索文本列的有效方法.
我能理解的最有效的方法是让数据库具有不区分大小写的排序规则.在我的情况下,我从头开始创建数据库,因此我可以完全控制数据库整理.唯一的问题是我不知道如何定义它,也找不到它的任何例子.
请告诉我如何使用不区分大小写的排序规则创建数据库.
我正在使用postgresql 9.2.4.
编辑1
该CITEXT扩展是一个很好的解决方案.但是,它有一些限制,如文档中所述.如果不存在更好的方法,我肯定会使用它.
我想强调一点,我希望所有字符串操作都不区分大小写.使用CITEXT每一个TEXT字段是一种方式.但是,如果可能的话,使用不区分大小写的校对将是最好的.
现在/sf/users/39372161/说PostgreSQL使用底层系统公开的任何排序规则.我不介意让操作系统暴露不区分大小写的排序规则.唯一的问题我不知道该怎么做.
小智 22
自从这个问题以来发生了很多变化。PostgreSQL v12 中添加了对不区分大小写排序规则的本机支持。citext如其他答案中所述,这基本上弃用了扩展名。
在 PostgreSQL v12 中,可以执行以下操作:
CREATE COLLATION case_insensitive (
provider = icu,
locale = 'und-u-ks-level2',
deterministic = false
);
CREATE TABLE names(
first_name text,
last_name text
);
insert into names values
('Anton','Egger'),
('Berta','egger'),
('Conrad','Egger');
select * from names
order by
last_name collate case_insensitive,
first_name collate case_insensitive;
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请参阅https://www.postgresql.org/docs/current/collation.html。
Den*_*rdy 11
没有不区分大小写的排序规则,但有citext扩展名:
http://www.postgresql.org/docs/current/static/citext.html
为了我的目的,ILIKE关键字完成了这项工作.
来自postgres文档:
可以使用关键字ILIKE而不是LIKE来根据活动区域设置使匹配不区分大小写.这不是SQL标准,而是PostgreSQL扩展.