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
Freigeben: 2025-01-20 12:36:12
Original
451 Leute haben es durchsucht

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage