【问题标题】:Change postgres to case insensitive将 postgres 更改为不区分大小写
【发布时间】:2022-01-17 09:59:01
【问题描述】:

如何将我的 Postgresql 数据库更新为不区分大小写?

我已经有一些表格和一些数据,目前它们区分大小写,但我想将它们全部更新为不区分大小写。

【问题讨论】:

  • 您可以进行不区分大小写的查询,甚至可以创建索引来支持这些查询——这就是您的意思吗?
  • 到目前为止,我只使用了 MSSQL(默认情况下不区分大小写 - 我从未接触过这部分,所以这只是我的猜测),现在我在一个使用 postgresql 的新项目中并且似乎他们正面临字符串搜索的问题(这让我相信引擎默认配置为区分大小写)。我想要做的是在引擎级别更新这个设置,这样我就不必去更新我的任何代码
  • 您的意思是当您编写查询时,您必须用双引号将列名括起来?例如:select "Column1","Column2" from "Table"。如果是这样,您已经制作了select * into table1 from "Table",然后是drop table "Table",最后是rename table1 as table
  • hereherehere

标签: postgresql


【解决方案1】:

您不能让您的 数据库 不区分大小写,但从 v12 开始,您可以创建不区分大小写的 ICU 排序规则并将其与列定义一起使用:

CREATE COLLATION english_ci (
   PROVIDER = 'icu',
   LOCALE = 'en-US@colStrength=secondary',
   DETERMINISTIC = FALSE
);

可以这样使用:

CREATE TABLE testtab (ci_col text COLLATE english_ci);

比较不区分大小写:

SELECT 'Hello' = 'hello' COLLATE english_ci;

 ?column? 
══════════
 t
(1 row)

【讨论】:

    【解决方案2】:

    有一个与电子邮件相关的问题具有有用的洞察力:PostgreSQL: Case insensitive string comparison

    基本上似乎有几种方法。你可以

    1. 在索引中使用 lower() 并确保在包括该列在内的每个查询子句中使用它。
    2. 转换为 citext(在 postgres 9 中可用),通过使用 lower() 进行内部比较,否则保留文本的正常行为。
    3. 最糟糕的是,您可能只能在插入时使用数据库触发器强制数据为小写。

    【讨论】:

    • 4.对相关列使用不区分大小写的排序规则。
    猜你喜欢
    • 2011-03-18
    • 2014-03-14
    • 2011-03-24
    • 2015-07-05
    • 1970-01-01
    • 2019-12-27
    • 1970-01-01
    • 2020-03-28
    相关资源
    最近更新 更多