* ロケール・日本語設定 [#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
List of databases
Name | Owner | Encoding | Collation | Ctype | Access privileges
-----------+----------+----------+-----------+-------+-----------------------
mydb01 | taro | EUC_JP | C | C |
mydb02 | taro | UTF8 | C | C |
** ロケール無し=ロケールC [#p21b9ec4]
「initdb locale=C」と「initdb --no-locale」は同じ意味。
** ロケールを設定するタイミング [#gcf5c222]
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