Maison >base de données >tutoriel mysql >Comment puis-je effectuer des requêtes insensibles aux accents dans PostgreSQL ?

Comment puis-je effectuer des requêtes insensibles aux accents dans PostgreSQL ?

DDD
DDDoriginal
2025-01-20 12:17:39726parcourir

How Can I Perform Accent-Insensitive Queries in PostgreSQL?

PostgreSQL prend-il en charge le classement insensible aux accents ?

Microsoft SQL Server fournit un classement « insensible aux accents », permettant d'exécuter une requête comme SELECT * FROM users WHERE name LIKE 'João' pour récupérer les lignes portant le nom « Joao ».

Solution pour PostgreSQL

PostgreSQL fournit le module unaccent, qui supprime les signes diacritiques des chaînes. Pour l'utiliser, installez l'extension et utilisez la fonction unaccent() :

<code class="language-sql">SELECT * FROM users WHERE unaccent(name) = unaccent('João');</code>

Optimisation de l'index

Pour accélérer les requêtes, créez un index d'expression :

<code class="language-sql">CREATE INDEX users_unaccent_name_idx ON users(unaccent(name));</code>

Pensez à qualifier les fonctions et dictionnaires en mode pour des raisons de sécurité :

<code class="language-sql">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));</code>

Fonctionnalités avancées

ligature

Dans PostgreSQL 9.6 et versions ultérieures, unaccent() développe correctement les ligatures, convertissant "Œ" en "OE" et "ß" en "ss".

Correspondance de motifs

L'utilisation de unaccent en conjonction avec le module pg_trgm vous permet d'effectuer une correspondance de modèles arbitraires en utilisant LIKE ou ILIKE et de créer un index d'expression triplet GIN ou GIST.

Pour plus de simplicité, envisagez d'utiliser l'indexation de triplet pour les modèles ancrés à gauche.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn