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
Libérer: 2025-01-20 12:17:39
original
743 Les gens l'ont consulté

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() :

SELECT * FROM users WHERE unaccent(name) = unaccent('João');
Copier après la connexion

Optimisation de l'index

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

CREATE INDEX users_unaccent_name_idx ON users(unaccent(name));
Copier après la connexion

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

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));
Copier après la connexion

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 de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal