2017-10-24 6 views
0

AFAIK alle drei der folgenden Tests sollten wahr (t) zurückgeben. Sie funktionieren tatsächlich, wenn ich COLLATE "de_DE" anhänge.PostgreSQL-Muster Übereinstimmung auf Umlauten

Ich führe dies auf einem interaktiven Datenbank-Terminal, also nicht sicher, die Kollation in Kraft getreten ist? Kann ich irgendwie überprüfen, welche Kollatierung in Kraft ist, und wenn ja, ändern Sie sie, ohne die (UTF-8-codierten) Daten zu ändern?

          version            
------------------------------------------------------------------------------------------------ 
PostgreSQL 9.4.13 on x86_64-unknown-linux-gnu, compiled by gcc (Debian 4.9.2-10) 4.9.2, 64-bit 

=> SELECT 'Ü' ~* 'Ü'; 
?column? 
---------- 
t 

=> SELECT 'Ü' ~* 'ü'; 
?column? 
---------- 
f 

=> SELECT 'Ü' ~* '\mÜ'; 
?column? 
---------- 
f 

Alternativ gibt es eine Möglichkeit, die Mustererkennung Umlaut-unempfindlich zu machen, das heißt haben 'Ü' ~*SOMETHINGHERE '\mU' Rückkehr t? Oder sollte ich einfach COLLATE an alle meine Abfragen anhängen? Oder sollte ich einfach folgendes ausführen, wird das eigentlich nicht die Daten berühren, nur Lookup-Verhalten und Indizes?

ALTER TABLE articles ALTER COLUMN title SET DATA TYPE VARCHAR(255) COLLATE "de_DE"; 

Antwort

1

Die Sortierung standardmäßig verwendet, wenn keine Kollatierung angegeben wird, ist die Datenbanksortierung, die Sie von den SQL-Anweisungen

SHOW lc_collate; 

oder

SELECT current_setting('lc_collate'); 

verwenden, um eine Zusammenstellung verschiedener finden Bei der Standardsortierung müssen Sie entweder explizit COLLATE in der Abfrage angeben, um die zu verwendende Sortierung anzugeben, oder Sie können ALTER TABLE wie von Ihnen vorgeschlagen verwenden.

Das sollte nicht Ihre Daten neu schreiben, und es wird keine Indizes ändern.

Verwandte Themen