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>
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>
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>
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!