PostgreSQL中的大小写不敏感

问题描述:

如何为整个PostgreSQL数据库甚至整个服务器/集群设置大小写不敏感?PostgreSQL中的大小写不敏感

UPD:用于列值。我刚刚从MS SQL迁移了数据库,现在正在寻找如何以最简单的方式获得类似于我们之前进行排序,过滤和其他内容的行为的行为。

+0

对于列值?对于对象名称? – 2013-02-22 11:31:01

未引用identifiers默认情况下(和每个SQL标准)不区分大小写。

除此之外,你不能在标准Postgres中设置“不区分大小写”。

您可能能够使用CITEXT数据类型,而不是VARCHAR/TEXT:

CITEXT Data Type documentation

CITEXT绝对是痛苦最小路线(按照从@Matthew木材的建议)

使用以下命令将扩展安装到当前数据库:

CREATE EXTENSION IF NOT EXISTS citext; 

这个运行查询像这样,当伟大工程:

SELECT * FROM product WHERE serial_number = 'aB' 

这将匹配成功abAbaBAB

你在哪里可能遇到麻烦就是如果你使用参数化SQL并让提供者为你构建命令。例如,使用Npgsql的(用于.NET ADO.NET提供者)使用下面的命令:

SELECT * FROM product WHERE serial_number = @serial_number; 

实际上其发送到服务器:

SELECT * FROM product WHERE serial_number = ((E'aB')::text); 

这是铸造的值为“文本”,其意味着它会做区分大小写的查找。 我设法解决这个问题的方法是修改Npgsql源代码以添加“citext”类型。使用此参数类型,将发出正确的命令:

SELECT * FROM product WHERE serial_number = ((E'aB')::citext);