ロケール・日本語設定各種ロケールの確認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 参考 |
|