PostgreSQLのエンコーディングについて
エンコーディングについてのドキュメント
djangoでpostgeSQLを使う時ALTER ROLE username SET client_encoding TO 'UTF8';とやってきた。これはデータベースのエンコーディングをUTF-8に変えることだと思っていた。しかし違う可能性が発覚。
ベストアンサー参照すること
http://q.hatena.ne.jp/1348030529
ということでドキュメントを見てみる。
https://www.postgresql.jp/document/11/html/multibyte.html
データベースのエンコーディング設定
データベースのエンコーディングの設定場面は二か所あるようだ。一回目がデフォルトのエンコーディングを定めるもの。二回目が個別具体的に定める。デフォルトのエンコーディングはinitdbコマンドを入力してデータベースクラスタを初期化するときに定められる。これはデフォルト値になるのでデータベースを作成するときにデフォルト値を上書きすることができる。
initdb -E EUC_JP
上記のようにデフォルトの設定する。
データベースを作成時には以下のように行う
createdb -E EUC_KR -T template0 --lc-collate=ko_KR.euckr --lc-ctype=ko_KR.euckr korean #または CREATE DATABASE korean WITH ENCODING 'EUC_KR' LC_COLLATE='ko_KR.euckr' LC_CTYPE='ko_KR.euckr' TEMPLATE=template0;
postgresqlクライアント側の文字セット設定
クライアント側の文字設定は以下のように行う。いろいろな方法で設定できる。
\encoding SJIS SET CLIENT_ENCODING TO 'value';
自動文字セット変換は、どうやらクライアント側で入力したSQLをデータベース側で適切なエンコードになおしてデータベースに反映させる仕組みらしい。サーバのエンコードに対して対応していないエンコード方法をクライアント側で設定するとエラーが出てくるようだ。おそらくこの機能を通じてクライアントとサーバのエンコード変換の質を担保する、ということではないだろうか。