Databáze PostgreSQL mají nativní typ znaků, „kódování serveru“. Obvykle je to utf-8.
Veškerý text je v tomto kódování. Text se smíšeným kódováním není podporován, pokud není uložen jako bytea
(tj. jako neprůhledné bajtové sekvence).
Nemůžete ukládat řetězce "unicode" nebo "non-unicode" a PostgreSQL nemá koncept "varchar" vs "nvarchar". S utf-8 jsou znaky, které spadají do 7bitového rozsahu ASCII (a některé další), uloženy jako jeden bajt a širší znaky vyžadují více úložiště, takže je to prostě automatické. utf-8 vyžaduje více úložného prostoru než ucs-2 nebo utf-16 pro text, který obsahuje všechny „širokoúhlé“ znaky, ale méně pro text, který je smíšený.
PostgreSQL automaticky převádí do/z klientského textového kódování pomocí client_encoding
nastavení. Není třeba explicitně převádět.
Pokud je váš klient "Unicode" (což produkty společnosti Microsoft mají tendenci říkat, když mají na mysli UCS-2 nebo UTF-16), většina klientských ovladačů se postará o jakoukoli konverzi utf-8 <--> utf-16 za vás.
Takže by vás to nemělo zajímat, pokud váš klient provádí I/O se správnými možnostmi znakové sady a nastavuje správné client_encoding
která odpovídají datům, která skutečně odesílá po drátě. (Toto je automatické u většiny klientských ovladačů, jako je PgJDBC, nPgSQL nebo ovladač Unicode psqlODBC).
Viz: