Heim >Datenbank >MySQL-Tutorial >Wie kann ich in PostgreSQL akzentunabhängige Abfragen durchführen?
Microsoft SQL Server bietet eine „akzentunabhängige“ Sortierung, die es ermöglicht, eine Abfrage wie SELECT * FROM users WHERE name LIKE 'João'
auszuführen, um Zeilen mit dem Namen „Joao“ abzurufen.
PostgreSQL stellt das Unaccent-Modul bereit, das diakritische Zeichen aus Zeichenfolgen entfernt. Um es zu verwenden, installieren Sie die Erweiterung und verwenden Sie die Funktion unaccent()
:
<code class="language-sql">SELECT * FROM users WHERE unaccent(name) = unaccent('João');</code>
Um Abfragen zu beschleunigen, erstellen Sie einen Ausdrucksindex:
<code class="language-sql">CREATE INDEX users_unaccent_name_idx ON users(unaccent(name));</code>
Denken Sie aus Sicherheitsgründen daran, Funktionen und Wörterbücher im Modus zu qualifizieren:
<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>
In PostgreSQL 9.6 und höher unaccent()
werden Ligaturen korrekt erweitert, indem „Œ“ in „OE“ und „ß“ in „ss“ umgewandelt wird.
Durch die Verwendung von unaccent
in Verbindung mit dem Modul pg_trgm
können Sie einen willkürlichen Mustervergleich mit LIKE
oder ILIKE
durchführen und einen Triplett-GIN- oder GIST-Ausdrucksindex erstellen.
Der Einfachheit halber erwägen Sie die Verwendung der Triplett-Indizierung für links verankerte Muster.
Das obige ist der detaillierte Inhalt vonWie kann ich in PostgreSQL akzentunabhängige Abfragen durchführen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!