ロケール・日本語設定

各種ロケールの確認

 psql> SHOW lc_collate;
 psql> SELECT name, setting, context FROM pg_settings WHERE name LIKE 'lc%';
     name     | setting |  context
 -------------+---------+-----------
  lc_collate  | C       | internal
  lc_ctype    | C       | internal
  lc_messages | C       | superuser
  lc_monetary | C       | user
  lc_numeric  | C       | user
  lc_time     | C       | user

クライアント側のエンコーディングの確認

 psql> \encoding
 UTF8

全データベースのロケール・エンコーディングの確認

 $ psql -l

または

 psql> \l
                              List of databases
    Name    |  Owner   | Encoding | Collation | Ctype |   Access privileges
 -----------+----------+----------+-----------+-------+-----------------------
  mydb01    | taro     | EUC_JP   | C         | C     |
  mydb02    | taro     | UTF8     | C         | C     |

ロケールに関する決まり事

ロケール無し=ロケールC

「initdb locale=C」と「initdb --no-locale」は同じ意味。

ロケールをC以外にするなら、必ずエンコーディングも同じにする

例えば、ロケールをEUC_JPにするなら、一緒にエンコーディングもEUC_JPに設定して、createdbしないといけない。

 $ createdb --encoding=EUC_JP --locale=ja_JP.EUC_JP --template=template0 mydb01

ロケールを設定するタイミング

initdbもしくはcreatedbする時。createdbで指定できるのはPostgreSQL8.4以降。

UTF8でinitdbして、EUCJPでcreatedbする

initdbする

 $ initdb --locale=C --encoding=UTF8

createdbする

 $ createdb --encoding=EUC_JP --locale=ja_JP.EUC_JP --template=template0 mydb01

localeとencodingのエンコーディングは揃える。

psqlで接続

 $ LC_ALL=ja_JP.eucjp psql mydb01

ターミナルのエンコーディングはEUCにしておく。

日本語が正しく扱えるか確認する

 CREATE TABLE t1 ( str text );
 INSERT INTO t1 VALUES ( 'ううう' );
 INSERT INTO t1 VALUES ( 'ええ' );
 INSERT INTO t1 VALUES ( 'お' );
 INSERT INTO t1 VALUES ( 'いいいい' );
 INSERT INTO t1 VALUES ( 'あああああ' );
 SELECT * FROM t1 WHERE str LIKE '%あ%';
 SELECT length(str), str FROM t1 ORDER BY str;

psqlで日本語入力が利かない(エコーバックされない)

readlineを切ってみる。

 $ psql -n mydb01

参考

ロケール(国際化と地域化)
http://lets.postgresql.jp/documents/technical/text-processing/2
psql
http://www.postgresql.jp/document/9.2/html/app-psql.html

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS

Last-modified: 2014-04-14 (月) 18:39:32