PostgreSQL中如何处理大小写敏感



我有一个用于颜色代码的主表,它存储各种唯一的颜色值。它有一个应用了UNIQUE约束的列Color_value。然而,它同时接受"黑人"one_answers"黑人"的价值观。如何处理这种情况?

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

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扩展(casei非敏感文本(并使用citext数据类型。然后可以使用一个简单的唯一约束。

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

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

    这个例子是针对奥地利德语,使用您选择的语言,或者使用und进行语言不可知的排序(只要存在这样的东西(。

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

最新更新