Maison > base de données > tutoriel mysql > PostgreSQL propose-t-il des classements insensibles aux accents pour une correspondance de chaînes efficace ?

PostgreSQL propose-t-il des classements insensibles aux accents pour une correspondance de chaînes efficace ?

Patricia Arquette
Libérer: 2025-01-20 12:36:12
original
451 Les gens l'ont consulté

Does PostgreSQL Offer Accent-Insensitive Collations for Efficient String Matching?

Prise en charge des classements « insensibles aux accents » de PostgreSQL

PostgreSQL prend-il en charge les classements « insensibles aux accents » ?

Microsoft SQL Server fournit un classement « insensible aux accents » qui permet d'exécuter des requêtes telles que SELECT * FROM users WHERE name LIKE 'João' pour trouver les lignes contenant le nom « Joao ». PostgreSQL ne prend pas en charge nativement de tels classements.

Solution utilisant le module unaccent

PostgreSQL fournit le module unaccent, qui supprime les signes diacritiques des chaînes. Pour l'utiliser, installez l'extension (CREATE EXTENSION sans accent). Vous pouvez ensuite effectuer une recherche insensible à la casse comme celle-ci :

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

Indice d'expression

Pour améliorer la vitesse des requêtes, utilisez la fonction f_unaccent pour créer un index d'expression. Cela permet au planificateur d'exploiter l'index pour les requêtes impliquant une non-accentuation.

<code class="language-sql">CREATE INDEX users_unaccent_name_idx ON users(f_unaccent(name));</code>
Copier après la connexion

PostgreSQL 12 et sa collation ICU

Les versions plus récentes de PostgreSQL (12) prennent en charge les classements ICU (International Component of Unicode), qui permettent un regroupement et un tri insensibles aux accents. Toutefois, ces classements peuvent avoir un impact sur les performances. Si vous privilégiez les performances, envisagez d'utiliser la solution sans accent.

<code class="language-sql">CREATE COLLATION ignore_accent (provider = icu, locale = 'und-u-ks-level1-kc-true', deterministic = false);
CREATE INDEX users_name_ignore_accent_idx ON users(name COLLATE ignore_accent);
SELECT * FROM users WHERE name = 'João' COLLATE ignore_accent;</code>
Copier après la connexion

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!

source:php.cn
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal