Heim >Datenbank >MySQL-Tutorial >Bietet PostgreSQL akzentunabhängige Sortierungen für einen effizienten String-Abgleich?

Bietet PostgreSQL akzentunabhängige Sortierungen für einen effizienten String-Abgleich?

Patricia Arquette
Patricia ArquetteOriginal
2025-01-20 12:36:12498Durchsuche

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

PostgreSQLs „akzentunabhängige“ Kollatierungsunterstützung

Unterstützt PostgreSQL „akzentunabhängige“ Sortierungen?

Microsoft SQL Server bietet eine „akzentunabhängige“ Sortierung, die es ermöglicht, Abfragen wie SELECT * FROM user WHERE name LIKE 'João' auszuführen, um Zeilen zu finden, die den Namen „Joao“ enthalten. PostgreSQL unterstützt solche Sortierungen nicht nativ.

Lösung mit Unaccent-Modul

PostgreSQL stellt das Unaccent-Modul bereit, das diakritische Zeichen aus Zeichenfolgen entfernt. Um es zu verwenden, installieren Sie die Erweiterung (CREATE EXTENSION unaccent). Anschließend können Sie eine Suche ohne Berücksichtigung der Groß-/Kleinschreibung wie folgt durchführen:

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

Ausdrucksindex

Um die Abfragegeschwindigkeit zu verbessern, verwenden Sie die Funktion f_unaccent, um einen Ausdrucksindex zu erstellen. Dadurch kann der Planer den Index für Abfragen nutzen, bei denen die Akzentuierung aufgehoben wird.

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

PostgreSQL 12 und seine ICU-Sortierung

Neuere PostgreSQL-Versionen (12) unterstützen ICU-Sortierungen (International Component of Unicode), die akzentunabhängige Gruppierung und Sortierung ermöglichen. Diese Sortierungen können sich jedoch auf die Leistung auswirken. Wenn Sie Wert auf Leistung legen, sollten Sie die unakzentfreie Lösung in Betracht ziehen.

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

Das obige ist der detaillierte Inhalt vonBietet PostgreSQL akzentunabhängige Sortierungen für einen effizienten String-Abgleich?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn