如何处理 PostgreSQL 中的大小写敏感问题

How to deal with Case Sensitivity in PostgreSQL

我有一个颜色代码大师 table,它存储各种独特的颜色值。它有一个应用了 UNIQUE 约束的列 Color_value。但是,它同时接受 'Black' 和 'black' 值。如何处理这种情况?

您可以像这样创建唯一索引:

create unique index unique_color_value on colors(lower(color_value));

也就是说,通过使用仅允许列中的小写值作为开头的约束,让您的数据从一开始就保持一致会简单得多。

create table colors (
    ...
    color_value text 
        unique 
        check(color_value = lower(color_value))
)

一个选项是 GMB 的回答中详述的唯一索引。

其他选项是:

  • 使用 citext 扩展名 (case insensitive text) 并使用 citext 数据类型。然后你可以使用一个简单的唯一约束。

  • 使用 PostgreSQL v12 或更高版本,创建不区分大小写的 ICU 排序规则:

    CREATE COLLATION german_ci (
       LOCALE = 'de_AT@colStrength=secondary',
       PROVIDER = 'icu',
       DETERMINISTIC = FALSE
    );
    

    该示例适用于奥地利德语,请使用您选择的语言或使用 und 与语言无关的排序规则(只要存在这样的事情)。

    然后使用常规唯一约束将列定义为 colname text COLLATE german_ci UNIQUE