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!