PostgreSQL-Datenbanken haben einen nativen Zeichentyp, die „Servercodierung“. Es ist normalerweise utf-8.
Der gesamte Text ist in dieser Kodierung. Text mit gemischter Codierung wird nicht unterstützt, außer wenn er als bytea
gespeichert wird (also als undurchsichtige Bytefolgen).
Sie können keine "Unicode"- oder "Nicht-Unicode"-Strings speichern, und PostgreSQL hat kein Konzept von "varchar" vs. "nvarchar". Mit utf-8 werden Zeichen, die in den 7-Bit-ASCII-Bereich fallen (und einige andere), als einzelnes Byte gespeichert, und breitere Zeichen erfordern mehr Speicherplatz, also ist es einfach automatisch. utf-8 erfordert mehr Speicherplatz als ucs-2 oder utf-16 für Text, der ausschließlich aus „breiten“ Zeichen besteht, aber weniger für Text, der eine Mischung ist.
PostgreSQL konvertiert mithilfe von client_encoding
automatisch in die/aus der Textcodierung des Clients Einstellung. Eine explizite Konvertierung ist nicht erforderlich.
Wenn Ihr Client "Unicode" ist (was Microsoft-Produkte normalerweise sagen, wenn sie UCS-2 oder UTF-16 meinen), dann kümmern sich die meisten Client-Treiber um die Konvertierung von utf-8 <--> utf-16 für Sie.
Sie sollten sich also nicht darum kümmern müssen, solange Ihr Client I/O mit korrekten Zeichensatzoptionen durchführt und eine korrekte client_encoding
einstellt das mit den Daten übereinstimmt, die es tatsächlich über das Kabel sendet. (Bei den meisten Client-Treibern wie PgJDBC, nPgSQL oder dem Unicode-psqlODBC-Treiber geschieht dies automatisch).
Siehe: