PostgreSQL中的大小写不敏感

时间:2013-02-22 11:01:37

标签: postgresql

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

UPD:对于列值。我只是从MS SQL迁移数据库,现在看看如何以最无痛的方式获得类似于我们之前的排序,过滤和其他东西的行为。

3 个答案:

答案 0 :(得分:2)

默认情况下,不带引号的identifiers不区分大小写(根据SQL标准)。

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

答案 1 :(得分:1)

CITEXT绝对是最不痛苦的路线(根据@Matthew Wood的建议)

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

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);

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

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

答案 2 :(得分:0)

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

CITEXT Data Type documentation