* ロケール・日本語設定 [#ydd85f54]
** 各種ロケールの確認 [#h5c7ea34]
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
** クライアント側のエンコーディングの確認 [#k4a56db6]
psql> \encoding
UTF8
** 全データベースのロケール・エンコーディングの確認 [#b46e1b03]
$ 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 [#p21b9ec4]
** ロケールに関する決まり事 [#nf061822]
*** ロケール無し=ロケールC [#z2dce4c0]
「initdb locale=C」と「initdb --no-locale」は同じ意味。
** ロケールを設定するタイミング [#gcf5c222]
*** ロケールをC以外にするなら、必ずエンコーディングも同じにする [#j2fc1a95]
例えば、ロケールをEUC_JPにするなら、一緒にエンコーディングもEUC_JPに設定して、createdbしないといけない。
$ createdb --encoding=EUC_JP --locale=ja_JP.EUC_JP --template=template0 mydb01
*** ロケールを設定するタイミング [#h13b6379]
initdbもしくはcreatedbする時。createdbで指定できるのはPostgreSQL8.4以降。
** UTF8でinitdbして、EUCJPでcreatedbする [#tefb644d]
*** initdbする [#xf952dbb]
$ initdb --locale=C --encoding=UTF8
*** createdbする [#z09dcae2]
$ createdb --encoding=EUC_JP --locale=ja_JP.EUC_JP --template=template0 mydb01
localeとencodingのエンコーディングは揃える。
*** psqlで接続 [#kf2712c3]
$ LC_ALL=ja_JP.eucjp psql mydb01
ターミナルのエンコーディングはEUCにしておく。
** 日本語が正しく扱えるか確認する [#d6d281ec]
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で日本語入力が利かない(エコーバックされない) [#v9632fe2]
readlineを切ってみる。
$ psql -n mydb01
** 参考 [#tf9ecd4f]
:ロケール(国際化と地域化)|http://lets.postgresql.jp/documents/technical/text-processing/2
:psql | http://www.postgresql.jp/document/9.2/html/app-psql.html