2017-12-31 143 views
0

Im Moment kann ich wählen Encoding : UTF8 beim Erstellen einer neuen DB in pgAdmin4 GUI.Install utf8 Kollatierung in PostgreSQL

Aber es gibt keine Option utf8_general_ci als Sortierung oder Zeichentyp zu wählen. Wenn ich select * from pg_collation; mache, sehe ich keine Übereinstimmung relevant für utf8_general_ci.

Kommt aus einem mySQL-Hintergrund Ich bin verwirrt. Muss ich die utf8-ähnliche Sortierung (zB utf8_general_ci, utf8_unicode_ci) in meinem PostgreSQL 10 oder windows10 installieren?

Ich möchte nur das Äquivalent von mySQL collation utf8_general_ci zu PostgreSQL haben.

Danke

Antwort

1

utf8 eine Codierung ist (wie als eine Reihe von Bytes Unicode-Zeichen darzustellen), nicht eine Zusammenstellung (die Zeichen vor dem geht).

ich denke, die 10 Postgres Sortierungs Äquivalent für utf8_general_ci (oder modernere utf8_unicode_ci) und-x-icu genannt wird - das ist eine undefinierte Sortierungs (nicht für eine wirkliche Weltsprache definiert) durch eine ICU-Bibliothek zur Verfügung gestellt. Diese Kollatierung würde ziemlich vernünftige Zeichen aus den meisten Sprachen sortieren.

Die ICU-Unterstützung ist eine neue Funktion, die in PostgreSQL 10 hinzugefügt wurde. Daher ist diese Sortierung für ältere PostgreSQL-Versionen nicht verfügbar oder wenn sie während der Kompilierung deaktiviert wird. Zuvor verwendete Postgres die vom Betriebssystem bereitgestellte Kollationsunterstützung, die zwischen den Betriebssystemen unterschiedlich ist.

+0

Frohes neues Jahr. Ja, ich kenne den Unterschied zwischen Kodierung und Kollation. Aber im Sinne von mySQL meine ich eine utf8-ähnliche Sortierung (zB 'utf8_general_ci' oder' utf8_unicode_ci'). Ich habe mein OP bearbeitet, um besser geschrieben zu werden. Wie auch immer, wenn 'und-x-icu' eine undefinierte Kollatierung ist, dann könnte ich auch C-Kollatierung verwenden, das ist auch eine undefinierte Kollatierung, oder? Danke – slevin

+1

Ich habe einige Tests gemacht und es scheint, dass in der aktuellen Version (10.1) ICU Unterstützung nicht so vollständig ist, wie ich angenommen habe. Es scheint, dass es unmöglich ist, eine Datenbank mit 'und-x-icu' locale zu erstellen - setze sie nur für einige Spalten explizit. So scheint es, dass bis Sie es verbessert haben, Sie wahrscheinlich verwenden müssen create database datenname template = 'template0' encoding = 'UTF8' lc_ctype = 'C' lc_collate = 'C'; oder andere OS-Locale. – Tometzky

+0

Hallo nochmal. Ich habe PostgreSQL 10.1, kompiliert von Visual C++ Build 1800, 64-Bit in win10 Laptop. Ich habe gerade 'DATABASE Test CREATE MIT OWNER = postgres TEMPLATE = template0 encoding = 'UTF8' LC_COLLATE = 'und-x-icu' LC_CTYPE = 'und-x-icu' TABLE = pg_default CONNECTION LIMIT = -1; 'und es hat funktioniert. Ich kann die Eigenschaften auch in der pgAdmin4 GUI sehen. – slevin

Verwandte Themen