首页 > 数据库 > mysql教程 > 如何在 PostgreSQL 中执行不区分重音的查询?

如何在 PostgreSQL 中执行不区分重音的查询?

DDD
发布: 2025-01-20 12:17:39
原创
744 人浏览过

How Can I Perform Accent-Insensitive Queries in PostgreSQL?

PostgreSQL 支持不区分重音符号的排序规则吗?

Microsoft SQL Server 提供“不区分重音符号”的排序规则,允许执行类似 SELECT * FROM users WHERE name LIKE 'João' 的查询,以检索名称为“Joao”的行。

PostgreSQL 的解决方案

PostgreSQL 提供 unaccent 模块,该模块可去除字符串中的变音符号。要使用它,请安装扩展并使用 unaccent() 函数:

SELECT * FROM users WHERE unaccent(name) = unaccent('João');
登录后复制

索引优化

为了加快查询速度,请创建表达式索引:

CREATE INDEX users_unaccent_name_idx ON users(unaccent(name));
登录后复制

请记住为安全起见限定函数和字典的模式:

CREATE OR REPLACE FUNCTION public.f_unaccent(text)
  RETURNS text
  LANGUAGE sql IMMUTABLE PARALLEL SAFE STRICT AS
$func$
SELECT public.immutable_unaccent('public.unaccent', )  -- 限定函数和字典的模式
$func$;

CREATE INDEX users_unaccent_name_idx ON users(public.f_unaccent(name));
登录后复制

高级功能

连字

在 PostgreSQL 9.6 及更高版本中,unaccent() 会正确展开连字,将“Œ”转换为“OE”,将“ß”转换为“ss”。

模式匹配

unaccentpg_trgm 模块结合使用,可以使用 LIKEILIKE 进行任意模式匹配,并创建一个三元组 GIN 或 GIST 表达式索引。

为简便起见,请考虑对左锚定模式使用三元组索引。

以上是如何在 PostgreSQL 中执行不区分重音的查询?的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板