Maison >base de données >tutoriel mysql >Comment puis-je effectuer des requêtes insensibles aux accents dans PostgreSQL ?
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 ».
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>
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>
Dans PostgreSQL 9.6 et versions ultérieures, unaccent()
développe correctement les ligatures, convertissant "Œ" en "OE" et "ß" en "ss".
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!