PostgreSQLでの「\encoding」コマンドによる現在の文字エンコーディングの確認と変更方法
Linuxコンソールの文字エンコーディングがUTF-8で、PostgreSQLデータベースがEUC_JPの場合、そのまま何も設定を変更することなくpsql接続をしてselectでテーブル内の日本語文字列を表示させようとすると、文字化けしてしまう。Linuxコンソールの文字エンコーディングとPostgreSQLのデータベースの文字コードが異なると文字化けしてしまうのだ。
Linuxコンソールの文字エンコーディングとPostgreSQLのデータベースの文字コードが異なる場合でも、Linuxコンソールで日本語文字列を文字化けなく表示させる方法の1つが、psqlコマンドを使用し、表示する文字のエンコーディングを変更し、Linuxコンソールの文字コードと同一にすることだ。
psqlであるデータベースに接続した後、
\encoding 文字コード
と入力し、[Enter]キーを押すことで、指定した文字コードに文字エンコーディングを変更することができる。
また、文字コードを指定せず、
\encoding
と入力し、[Enter]キーを押すことで、現在の文字エンコーディングを確認することもできる。
《備考》PostgreSQL8.1のヘルプに記載されている情報
\encoding [ENCODING]
show or set client encoding
《例》Linux(CentOS 5)+PostgreSQL 8.1での現在の文字エンコーディングの確認と変更方法
[root@nobuneko ~]# psql -U postgres nobuneko_database
Welcome to psql 8.1.23, the PostgreSQL interactive terminal.
Type: \copyright for distribution terms
\h for help with SQL commands
\? for help with psql commands
\g or terminate with semicolon to execute query
\q to quit
nobuneko_database=# \encoding
EUC_JP ※現在の文字エンコーディングがEUC_JPであることが分かる。
nobuneko_database=# \encoding UTF8 ※現在の文字エンコーディングをUTF-8に変更する。
nobuneko_database=# \encoding
UTF8 ※現在の文字エンコーディングがUTF-8であることが分かる。
※実行したコマンドは「\encoding UTF8」としたが、「\encoding UTF-8」としても同じ結果だった。
キーボードで「UTF」まで入力し、キーボードのTabキーを押すと、「UTF8」と入力補完されたので、PostgreSQL的には、「UTF-8」ではなく「UTF8」が正式なのだろう。